17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h" 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/path_service.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/strings/string_split.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/browser_process.h" 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/component_updater/pnacl/pnacl_component_installer.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/nacl_host/nacl_infobar_delegate.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/chrome_paths.h" 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/chrome_paths_internal.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/chrome_version_info.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/logging_chrome.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/common/pepper_permission_util.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/browser/browser_thread.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/info_map.h" 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/process_manager.h" 258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "extensions/common/constants.h" 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "extensions/common/url_pattern.h" 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ppapi/c/private/ppb_nacl_private.h" 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "url/gurl.h" 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// These are temporarily needed for testing non-sfi mode on ChromeOS without 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// passing command-line arguments to Chrome. 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* const kAllowedNonSfiOrigins[] = { 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see http://crbug.com/355141 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see http://crbug.com/355141 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Handles an extension's NaCl process transitioning in or out of idle state by 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// relaying the state to the extension's process manager. 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// A NaCl instance, when active (making PPAPI calls or receiving callbacks), 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// sends keepalive IPCs to the browser process BrowserPpapiHost at a throttled 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// rate. The content::BrowserPpapiHost passes context information up to the 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// chrome level NaClProcessHost where we use the instance's context to find the 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// associated extension process manager. 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// There is a 1:many relationship for extension:nacl-embeds, but only a 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// 1:1 relationship for NaClProcessHost:PP_Instance. The content layer doesn't 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// rely on this knowledge because it routes messages for ppapi non-nacl 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// instances as well, though they won't have callbacks set. Here the 1:1 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// assumption is made and DCHECKed. 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void OnKeepaliveOnUIThread( 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const content::BrowserPpapiHost::OnKeepaliveInstanceData& instance_data, 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& profile_data_directory) { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Only one instance will exist for NaCl embeds, even when more than one 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // embed of the same plugin exists on the same page. 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(instance_data.size() == 1); 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (instance_data.size() < 1) 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) extensions::ProcessManager::OnKeepaliveFromPlugin( 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) instance_data[0].render_process_id, 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) instance_data[0].render_frame_id, 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) instance_data[0].document_url.host()); 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Calls OnKeepaliveOnUIThread on UI thread. 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void OnKeepalive( 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const content::BrowserPpapiHost::OnKeepaliveInstanceData& instance_data, 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& profile_data_directory) { 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&OnKeepaliveOnUIThread, 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) instance_data, 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_data_directory)); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)NaClBrowserDelegateImpl::NaClBrowserDelegateImpl( 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ProfileManager* profile_manager) 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : profile_manager_(profile_manager), inverse_debug_patterns_(false) { 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DCHECK(profile_manager_); 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (size_t i = 0; i < arraysize(kAllowedNonSfiOrigins); ++i) { 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) allowed_nonsfi_origins_.insert(kAllowedNonSfiOrigins[i]); 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)NaClBrowserDelegateImpl::~NaClBrowserDelegateImpl() { 968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NaClBrowserDelegateImpl::ShowMissingArchInfobar(int render_process_id, 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int render_view_id) { 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserThread::PostTask( 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserThread::UI, FROM_HERE, 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&NaClInfoBarDelegate::Create, render_process_id, 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch render_view_id)); 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool NaClBrowserDelegateImpl::DialogsAreSuppressed() { 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return logging::DialogsAreSuppressed(); 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool NaClBrowserDelegateImpl::GetCacheDirectory(base::FilePath* cache_dir) { 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath user_data_dir; 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)) 1137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chrome::GetUserCacheDirectory(user_data_dir, cache_dir); 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return true; 1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool NaClBrowserDelegateImpl::GetPluginDirectory(base::FilePath* plugin_dir) { 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return PathService::Get(chrome::DIR_INTERNAL_PLUGINS, plugin_dir); 1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool NaClBrowserDelegateImpl::GetPnaclDirectory(base::FilePath* pnacl_dir) { 1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return PathService::Get(chrome::DIR_PNACL_COMPONENT, pnacl_dir); 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool NaClBrowserDelegateImpl::GetUserDirectory(base::FilePath* user_dir) { 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return PathService::Get(chrome::DIR_USER_DATA, user_dir); 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstd::string NaClBrowserDelegateImpl::GetVersionString() const { 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return chrome::VersionInfo().CreateVersionString(); 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochppapi::host::HostFactory* NaClBrowserDelegateImpl::CreatePpapiHostFactory( 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserPpapiHost* ppapi_host) { 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return new chrome::ChromeBrowserPepperHostFactory(ppapi_host); 1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 138a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void NaClBrowserDelegateImpl::SetDebugPatterns(std::string debug_patterns) { 1401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!debug_patterns.empty() && debug_patterns[0] == '!') { 1411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) inverse_debug_patterns_ = true; 1421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) debug_patterns.erase(0, 1); 1431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (debug_patterns.empty()) { 1451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::vector<std::string> patterns; 1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::SplitString(debug_patterns, ',', &patterns); 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (std::vector<std::string>::iterator iter = patterns.begin(); 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) iter != patterns.end(); ++iter) { 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Allow chrome:// schema, which is used to filter out the internal 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // PNaCl translator. Also allow chrome-extension:// schema (which 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // can have NaCl modules). The default is to disallow these schema 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // since they can be dangerous in the context of chrome extension 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // permissions, but they are okay here, for NaCl GDB avoidance. 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) URLPattern pattern(URLPattern::SCHEME_ALL); 1571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (pattern.Parse(*iter) == URLPattern::PARSE_SUCCESS) { 1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If URL pattern has scheme equal to *, Parse method resets valid 1591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // schemes mask to http and https only, so we need to reset it after 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Parse to re-include chrome-extension and chrome schema. 1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) pattern.SetValidSchemes(URLPattern::SCHEME_ALL); 1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) debug_patterns_.push_back(pattern); 1631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool NaClBrowserDelegateImpl::URLMatchesDebugPatterns( 1681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const GURL& manifest_url) { 1691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Empty patterns are forbidden so we ignore them. 1701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (debug_patterns_.empty()) { 1711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return true; 1721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool matches = false; 1741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (std::vector<URLPattern>::iterator iter = debug_patterns_.begin(); 1751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) iter != debug_patterns_.end(); ++iter) { 1761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (iter->MatchesURL(manifest_url)) { 1771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) matches = true; 1781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) break; 1791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (inverse_debug_patterns_) { 1821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return !matches; 1831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } else { 1841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return matches; 1851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// This function is security sensitive. Be sure to check with a security 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// person before you modify it. 1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)bool NaClBrowserDelegateImpl::MapUrlToLocalFilePath( 191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const GURL& file_url, 192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool use_blocking_api, 193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const base::FilePath& profile_directory, 194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath* file_path) { 19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_refptr<extensions::InfoMap> extension_info_map = 197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetExtensionInfoMap(profile_directory); 1986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return extension_info_map->MapUrlToLocalFilePath( 1996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) file_url, use_blocking_api, file_path); 20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#else 20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 20203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif 2038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)content::BrowserPpapiHost::OnKeepaliveCallback 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)NaClBrowserDelegateImpl::GetOnKeepaliveCallback() { 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::Bind(&OnKeepalive); 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool NaClBrowserDelegateImpl::IsNonSfiModeAllowed( 211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& profile_directory, 212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& manifest_url) { 21303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const extensions::ExtensionSet* extension_set = 215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &GetExtensionInfoMap(profile_directory)->extensions(); 216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return chrome::IsExtensionOrSharedModuleWhitelisted( 217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) manifest_url, extension_set, allowed_nonsfi_origins_); 21803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#else 21903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 22003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 22303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)scoped_refptr<extensions::InfoMap> NaClBrowserDelegateImpl::GetExtensionInfoMap( 225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& profile_directory) { 226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Get the profile associated with the renderer. 227cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile = profile_manager_->GetProfileByPath(profile_directory); 228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(profile); 229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<extensions::InfoMap> extension_info_map = 230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(); 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(extension_info_map.get()); 232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return extension_info_map; 233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 23403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif 235