nacl_host_message_filter.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/nacl/browser/nacl_host_message_filter.h" 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/sys_info.h" 80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "components/nacl/browser/nacl_browser.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/nacl/browser/nacl_file_host.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/nacl/browser/nacl_process_host.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/nacl/browser/pnacl_host.h" 12a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "components/nacl/common/nacl_host_messages.h" 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ipc/ipc_platform_file.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "net/url_request/url_request_context.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "url/gurl.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace nacl { 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)NaClHostMessageFilter::NaClHostMessageFilter( 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int render_process_id, 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_off_the_record, 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath& profile_directory, 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestContextGetter* request_context) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : BrowserMessageFilter(NaClHostMsgStart), 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id_(render_process_id), 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch off_the_record_(is_off_the_record), 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_directory_(profile_directory), 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) request_context_(request_context), 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) weak_ptr_factory_(this) { 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)NaClHostMessageFilter::~NaClHostMessageFilter() { 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid NaClHostMessageFilter::OnChannelClosing() { 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pnacl::PnaclHost::GetInstance()->RendererClosing(render_process_id_); 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool NaClHostMessageFilter::OnMessageReceived(const IPC::Message& message) { 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool handled = true; 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(NaClHostMessageFilter, message) 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(DISABLE_NACL) 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_LaunchNaCl, OnLaunchNaCl) 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_GetReadonlyPnaclFD, 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnGetReadonlyPnaclFd) 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_NaClCreateTemporaryFile, 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnNaClCreateTemporaryFile) 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IPC_MESSAGE_HANDLER(NaClHostMsg_NexeTempFileRequest, 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OnGetNexeFd) 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IPC_MESSAGE_HANDLER(NaClHostMsg_ReportTranslationFinished, 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OnTranslationFinished) 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IPC_MESSAGE_HANDLER(NaClHostMsg_MissingArchError, 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnMissingArchError) 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_OpenNaClExecutable, 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnOpenNaClExecutable) 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC_MESSAGE_HANDLER(NaClHostMsg_NaClGetNumProcessors, 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnNaClGetNumProcessors) 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch IPC_MESSAGE_HANDLER(NaClHostMsg_NaClDebugEnabledForURL, 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OnNaClDebugEnabledForURL) 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC_END_MESSAGE_MAP() 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return handled; 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)net::HostResolver* NaClHostMessageFilter::GetHostResolver() { 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return request_context_->GetURLRequestContext()->host_resolver(); 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void NaClHostMessageFilter::OnLaunchNaCl( 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const nacl::NaClLaunchParams& launch_params, 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC::Message* reply_msg) { 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NaClProcessHost* host = new NaClProcessHost( 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL(launch_params.manifest_url), 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) launch_params.render_view_id, 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) launch_params.permission_bits, 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) launch_params.uses_irt, 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) launch_params.uses_nonsfi_mode, 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) launch_params.enable_dyncode_syscalls, 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) launch_params.enable_exception_handling, 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) launch_params.enable_crash_throttling, 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) off_the_record_, 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_directory_); 868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) GURL manifest_url(launch_params.manifest_url); 878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath manifest_path; 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // We're calling MapUrlToLocalFilePath with the non-blocking API 898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // because we're running in the I/O thread. Ideally we'd use the other path, 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // which would cover more cases. 910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) nacl::NaClBrowser::GetDelegate()->MapUrlToLocalFilePath( 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) manifest_url, 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false /* use_blocking_api */, 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) profile_directory_, 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &manifest_path); 968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) host->Launch(this, reply_msg, manifest_path); 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void NaClHostMessageFilter::OnGetReadonlyPnaclFd( 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& filename, IPC::Message* reply_msg) { 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This posts a task to another thread, but the renderer will 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // block until the reply is sent. 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) nacl_file_host::GetReadonlyPnaclFd(this, filename, reply_msg); 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // This is the first message we receive from the renderer once it knows we 106ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // want to use PNaCl, so start the translation cache initialization here. 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pnacl::PnaclHost::GetInstance()->Init(); 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Return the temporary file via a reply to the 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// NaClHostMsg_NaClCreateTemporaryFile sync message. 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid NaClHostMessageFilter::SyncReturnTemporaryFile( 1137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IPC::Message* reply_msg, 114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::File file) { 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (file.IsValid()) { 1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NaClHostMsg_NaClCreateTemporaryFile::WriteReplyParams( 117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch reply_msg, 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IPC::TakeFileHandleForProcess(file.Pass(), PeerHandle())); 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) reply_msg->set_reply_error(); 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Send(reply_msg); 1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void NaClHostMessageFilter::OnNaClCreateTemporaryFile( 1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC::Message* reply_msg) { 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pnacl::PnaclHost::GetInstance()->CreateTemporaryFile( 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&NaClHostMessageFilter::SyncReturnTemporaryFile, 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch this, 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch reply_msg)); 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid NaClHostMessageFilter::AsyncReturnTemporaryFile( 134ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int pp_instance, 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::File& file, 136ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool is_hit) { 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) IPC::PlatformFileForTransit fd = IPC::InvalidPlatformFileForTransit(); 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (file.IsValid()) { 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Don't close our copy of the handle, because PnaclHost will use it 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // when the translation finishes. 14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) fd = IPC::GetFileHandleForProcess(file.GetPlatformFile(), PeerHandle(), 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) false); 14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Send(new NaClViewMsg_NexeTempFileReply(pp_instance, is_hit, fd)); 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NaClHostMessageFilter::OnNaClGetNumProcessors(int* num_processors) { 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *num_processors = base::SysInfo::NumberOfProcessors(); 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid NaClHostMessageFilter::OnGetNexeFd( 1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int render_view_id, 153ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int pp_instance, 1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const nacl::PnaclCacheInfo& cache_info) { 155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!cache_info.pexe_url.is_valid()) { 156ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch LOG(ERROR) << "Bad URL received from GetNexeFd: " << 157ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch cache_info.pexe_url.possibly_invalid_spec(); 158ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch BadMessageReceived(); 159ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 160ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 161ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pnacl::PnaclHost::GetInstance()->GetNexeFd( 163ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch render_process_id_, 164ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch render_view_id, 165ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pp_instance, 166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch off_the_record_, 167ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch cache_info, 1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&NaClHostMessageFilter::AsyncReturnTemporaryFile, 1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch this, 170ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pp_instance)); 1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 173bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid NaClHostMessageFilter::OnTranslationFinished(int instance, bool success) { 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pnacl::PnaclHost::GetInstance()->TranslationFinished( 175bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch render_process_id_, instance, success); 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 178a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NaClHostMessageFilter::OnMissingArchError(int render_view_id) { 179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) nacl::NaClBrowser::GetDelegate()-> 180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ShowMissingArchInfobar(render_process_id_, render_view_id); 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void NaClHostMessageFilter::OnOpenNaClExecutable(int render_view_id, 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& file_url, 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC::Message* reply_msg) { 1868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) nacl_file_host::OpenNaClExecutable(this, render_view_id, file_url, 1878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) reply_msg); 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid NaClHostMessageFilter::OnNaClDebugEnabledForURL(const GURL& nmf_url, 191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool* should_debug) { 192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *should_debug = 193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch nacl::NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(nmf_url); 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace nacl 197