nacl_host_message_filter.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
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
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool NaClHostMessageFilter::OnMessageReceived(const IPC::Message& message,
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                              bool* message_was_ok) {
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  bool handled = true;
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  IPC_BEGIN_MESSAGE_MAP_EX(NaClHostMessageFilter, message, *message_was_ok)
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(DISABLE_NACL)
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_LaunchNaCl, OnLaunchNaCl)
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_GetReadonlyPnaclFD,
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                    OnGetReadonlyPnaclFd)
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_NaClCreateTemporaryFile,
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                    OnNaClCreateTemporaryFile)
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    IPC_MESSAGE_HANDLER(NaClHostMsg_NexeTempFileRequest,
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                        OnGetNexeFd)
527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    IPC_MESSAGE_HANDLER(NaClHostMsg_ReportTranslationFinished,
537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                        OnTranslationFinished)
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    IPC_MESSAGE_HANDLER(NaClHostMsg_MissingArchError,
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                        OnMissingArchError)
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_OpenNaClExecutable,
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                    OnOpenNaClExecutable)
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    IPC_MESSAGE_HANDLER(NaClHostMsg_NaClGetNumProcessors,
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        OnNaClGetNumProcessors)
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    IPC_MESSAGE_HANDLER(NaClHostMsg_NaClDebugEnabledForURL,
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                        OnNaClDebugEnabledForURL)
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    IPC_MESSAGE_UNHANDLED(handled = false)
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  IPC_END_MESSAGE_MAP()
657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return handled;
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)net::HostResolver* NaClHostMessageFilter::GetHostResolver() {
707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return request_context_->GetURLRequestContext()->host_resolver();
717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void NaClHostMessageFilter::OnLaunchNaCl(
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const nacl::NaClLaunchParams& launch_params,
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    IPC::Message* reply_msg) {
767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  NaClProcessHost* host = new NaClProcessHost(
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      GURL(launch_params.manifest_url),
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      launch_params.render_view_id,
797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      launch_params.permission_bits,
807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      launch_params.uses_irt,
81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      launch_params.uses_nonsfi_mode,
827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      launch_params.enable_dyncode_syscalls,
837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      launch_params.enable_exception_handling,
843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      launch_params.enable_crash_throttling,
857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      off_the_record_,
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      profile_directory_);
878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  GURL manifest_url(launch_params.manifest_url);
888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  base::FilePath manifest_path;
898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // We're calling MapUrlToLocalFilePath with the non-blocking API
908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // because we're running in the I/O thread. Ideally we'd use the other path,
918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // which would cover more cases.
920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  nacl::NaClBrowser::GetDelegate()->MapUrlToLocalFilePath(
938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      manifest_url, false /* use_blocking_api */, &manifest_path);
948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  host->Launch(this, reply_msg, manifest_path);
957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void NaClHostMessageFilter::OnGetReadonlyPnaclFd(
987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const std::string& filename, IPC::Message* reply_msg) {
997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // This posts a task to another thread, but the renderer will
1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // block until the reply is sent.
1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  nacl_file_host::GetReadonlyPnaclFd(this, filename, reply_msg);
102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // This is the first message we receive from the renderer once it knows we
104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // want to use PNaCl, so start the translation cache initialization here.
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  pnacl::PnaclHost::GetInstance()->Init();
1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Return the temporary file via a reply to the
1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// NaClHostMsg_NaClCreateTemporaryFile sync message.
1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid NaClHostMessageFilter::SyncReturnTemporaryFile(
1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    IPC::Message* reply_msg,
112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    base::File file) {
113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (file.IsValid()) {
1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    NaClHostMsg_NaClCreateTemporaryFile::WriteReplyParams(
115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        reply_msg,
116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        IPC::TakeFileHandleForProcess(file.Pass(), PeerHandle()));
117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else {
118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    reply_msg->set_reply_error();
1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  Send(reply_msg);
1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void NaClHostMessageFilter::OnNaClCreateTemporaryFile(
1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    IPC::Message* reply_msg) {
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  pnacl::PnaclHost::GetInstance()->CreateTemporaryFile(
1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      base::Bind(&NaClHostMessageFilter::SyncReturnTemporaryFile,
1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                 this,
1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                 reply_msg));
1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid NaClHostMessageFilter::AsyncReturnTemporaryFile(
132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    int pp_instance,
133ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    base::PlatformFile fd,
134ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    bool is_hit) {
135ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  Send(new NaClViewMsg_NexeTempFileReply(
136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      pp_instance,
137ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      is_hit,
138ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      // Don't close our copy of the handle, because PnaclHost will use it
139ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      // when the translation finishes.
140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      IPC::GetFileHandleForProcess(fd, PeerHandle(), false)));
1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NaClHostMessageFilter::OnNaClGetNumProcessors(int* num_processors) {
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  *num_processors = base::SysInfo::NumberOfProcessors();
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid NaClHostMessageFilter::OnGetNexeFd(
1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    int render_view_id,
149ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    int pp_instance,
1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const nacl::PnaclCacheInfo& cache_info) {
151ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  if (!cache_info.pexe_url.is_valid()) {
152ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    LOG(ERROR) << "Bad URL received from GetNexeFd: " <<
153ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch        cache_info.pexe_url.possibly_invalid_spec();
154ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    BadMessageReceived();
155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    return;
156ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  }
157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  pnacl::PnaclHost::GetInstance()->GetNexeFd(
159ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      render_process_id_,
160ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      render_view_id,
161ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      pp_instance,
162ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      off_the_record_,
163ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      cache_info,
1647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      base::Bind(&NaClHostMessageFilter::AsyncReturnTemporaryFile,
1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                 this,
166ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                 pp_instance));
1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
169bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid NaClHostMessageFilter::OnTranslationFinished(int instance, bool success) {
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  pnacl::PnaclHost::GetInstance()->TranslationFinished(
171bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch      render_process_id_, instance, success);
1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NaClHostMessageFilter::OnMissingArchError(int render_view_id) {
175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  nacl::NaClBrowser::GetDelegate()->
176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      ShowMissingArchInfobar(render_process_id_, render_view_id);
1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void NaClHostMessageFilter::OnOpenNaClExecutable(int render_view_id,
1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                                 const GURL& file_url,
1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                                 IPC::Message* reply_msg) {
1828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  nacl_file_host::OpenNaClExecutable(this, render_view_id, file_url,
1838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                     reply_msg);
1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
186effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid NaClHostMessageFilter::OnNaClDebugEnabledForURL(const GURL& nmf_url,
187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                                     bool* should_debug) {
188effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  *should_debug =
189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      nacl::NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(nmf_url);
190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace nacl
193