Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(104)

Side by Side Diff: chrome/browser/chrome_content_browser_client.cc

Issue 591063003: Split ChromeContentBrowserClient into smaller parts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chrome_content_browser_client.h" 5 #include "chrome/browser/chrome_content_browser_client.h"
6 6
7 #include <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 28 matching lines...) Expand all
39 #include "chrome/browser/media/cast_transport_host_filter.h" 39 #include "chrome/browser/media/cast_transport_host_filter.h"
40 #include "chrome/browser/media/media_capture_devices_dispatcher.h" 40 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
41 #include "chrome/browser/media/midi_permission_context.h" 41 #include "chrome/browser/media/midi_permission_context.h"
42 #include "chrome/browser/media/midi_permission_context_factory.h" 42 #include "chrome/browser/media/midi_permission_context_factory.h"
43 #include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h" 43 #include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h"
44 #include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h" 44 #include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h"
45 #include "chrome/browser/net/chrome_net_log.h" 45 #include "chrome/browser/net/chrome_net_log.h"
46 #include "chrome/browser/notifications/desktop_notification_service.h" 46 #include "chrome/browser/notifications/desktop_notification_service.h"
47 #include "chrome/browser/notifications/desktop_notification_service_factory.h" 47 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
48 #include "chrome/browser/platform_util.h" 48 #include "chrome/browser/platform_util.h"
49 #include "chrome/browser/plugins/plugin_info_message_filter.h"
50 #include "chrome/browser/prerender/prerender_final_status.h" 49 #include "chrome/browser/prerender/prerender_final_status.h"
51 #include "chrome/browser/prerender/prerender_manager.h" 50 #include "chrome/browser/prerender/prerender_manager.h"
52 #include "chrome/browser/prerender/prerender_manager_factory.h" 51 #include "chrome/browser/prerender/prerender_manager_factory.h"
53 #include "chrome/browser/prerender/prerender_message_filter.h" 52 #include "chrome/browser/prerender/prerender_message_filter.h"
54 #include "chrome/browser/prerender/prerender_tracker.h" 53 #include "chrome/browser/prerender/prerender_tracker.h"
55 #include "chrome/browser/printing/printing_message_filter.h" 54 #include "chrome/browser/printing/printing_message_filter.h"
56 #include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" 55 #include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h"
57 #include "chrome/browser/profiles/profile.h" 56 #include "chrome/browser/profiles/profile.h"
58 #include "chrome/browser/profiles/profile_io_data.h" 57 #include "chrome/browser/profiles/profile_io_data.h"
59 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" 58 #include "chrome/browser/renderer_host/chrome_render_message_filter.h"
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 #include "extensions/common/constants.h" 231 #include "extensions/common/constants.h"
233 #include "extensions/common/extension.h" 232 #include "extensions/common/extension.h"
234 #include "extensions/common/extension_set.h" 233 #include "extensions/common/extension_set.h"
235 #include "extensions/common/manifest_handlers/background_info.h" 234 #include "extensions/common/manifest_handlers/background_info.h"
236 #include "extensions/common/manifest_handlers/shared_module_info.h" 235 #include "extensions/common/manifest_handlers/shared_module_info.h"
237 #include "extensions/common/permissions/permissions_data.h" 236 #include "extensions/common/permissions/permissions_data.h"
238 #include "extensions/common/permissions/socket_permission.h" 237 #include "extensions/common/permissions/socket_permission.h"
239 #include "extensions/common/switches.h" 238 #include "extensions/common/switches.h"
240 #endif 239 #endif
241 240
241 #if defined(ENABLE_PLUGINS)
242 #include "chrome/browser/plugins/chrome_content_browser_client_plugins_part.h"
243 #endif
244
242 #if defined(ENABLE_SPELLCHECK) 245 #if defined(ENABLE_SPELLCHECK)
243 #include "chrome/browser/spellchecker/spellcheck_message_filter.h" 246 #include "chrome/browser/spellchecker/spellcheck_message_filter.h"
244 #endif 247 #endif
245 248
246 #if defined(ENABLE_WEBRTC) 249 #if defined(ENABLE_WEBRTC)
247 #include "chrome/browser/media/webrtc_logging_handler_host.h" 250 #include "chrome/browser/media/webrtc_logging_handler_host.h"
248 #endif 251 #endif
249 252
250 using base::FileDescriptor; 253 using base::FileDescriptor;
251 using blink::WebWindowFeatures; 254 using blink::WebWindowFeatures;
(...skipping 21 matching lines...) Expand all
273 using extensions::InfoMap; 276 using extensions::InfoMap;
274 using extensions::Manifest; 277 using extensions::Manifest;
275 #endif 278 #endif
276 279
277 namespace { 280 namespace {
278 281
279 // Cached version of the locale so we can return the locale on the I/O 282 // Cached version of the locale so we can return the locale on the I/O
280 // thread. 283 // thread.
281 base::LazyInstance<std::string> g_io_thread_application_locale; 284 base::LazyInstance<std::string> g_io_thread_application_locale;
282 285
283 #if defined(ENABLE_PLUGINS)
284 // TODO(teravest): Add renderer-side API-specific checking for these APIs so
285 // that blanket permission isn't granted to all dev channel APIs for these.
286 // http://crbug.com/386743
287 const char* const kPredefinedAllowedDevChannelOrigins[] = {
288 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/383937
289 "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see crbug.com/383937
290 };
291
292 const char* const kPredefinedAllowedFileHandleOrigins[] = {
293 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789
294 "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see crbug.com/234789
295 };
296
297 const char* const kPredefinedAllowedSocketOrigins[] = {
298 "okddffdblfhhnmhodogpojmfkjmhinfp", // Test SSH Client
299 "pnhechapfaindjhompbnflcldabbghjo", // HTerm App (SSH Client)
300 "bglhmjfplikpjnfoegeomebmfnkjomhe", // see crbug.com/122126
301 "gbchcmhmhahfdphkhkmpfmihenigjmpp", // Chrome Remote Desktop
302 "kgngmbheleoaphbjbaiobfdepmghbfah", // Pre-release Chrome Remote Desktop
303 "odkaodonbgfohohmklejpjiejmcipmib", // Dogfood Chrome Remote Desktop
304 "ojoimpklfciegopdfgeenehpalipignm", // Chromoting canary
305 "cbkkbcmdlboombapidmoeolnmdacpkch", // see crbug.com/129089
306 "hhnbmknkdabfoieppbbljkhkfjcmcbjh", // see crbug.com/134099
307 "mablfbjkhmhkmefkjjacnbaikjkipphg", // see crbug.com/134099
308 "pdeelgamlgannhelgoegilelnnojegoh", // see crbug.com/134099
309 "cabapfdbkniadpollkckdnedaanlciaj", // see crbug.com/134099
310 "mapljbgnjledlpdmlchihnmeclmefbba", // see crbug.com/134099
311 "ghbfeebgmiidnnmeobbbaiamklmpbpii", // see crbug.com/134099
312 "jdfhpkjeckflbbleddjlpimecpbjdeep", // see crbug.com/142514
313 "iabmpiboiopbgfabjmgeedhcmjenhbla", // see crbug.com/165080
314 "B7CF8A292249681AF81771650BA4CEEAF19A4560", // see crbug.com/165080
315 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789
316 "4EB74897CB187C7633357C2FE832E0AD6A44883A", // see crbug.com/234789
317 "7525AF4F66763A70A883C4700529F647B470E4D2", // see crbug.com/238084
318 "0B549507088E1564D672F7942EB87CA4DAD73972", // see crbug.com/238084
319 "864288364E239573E777D3E0E36864E590E95C74" // see crbug.com/238084
320 };
321 #endif
322
323 // Returns a copy of the given url with its host set to given host and path set 286 // Returns a copy of the given url with its host set to given host and path set
324 // to given path. Other parts of the url will be the same. 287 // to given path. Other parts of the url will be the same.
325 GURL ReplaceURLHostAndPath(const GURL& url, 288 GURL ReplaceURLHostAndPath(const GURL& url,
326 const std::string& host, 289 const std::string& host,
327 const std::string& path) { 290 const std::string& path) {
328 url::Replacements<char> replacements; 291 url::Replacements<char> replacements;
329 replacements.SetHost(host.c_str(), url::Component(0, host.length())); 292 replacements.SetHost(host.c_str(), url::Component(0, host.length()));
330 replacements.SetPath(path.c_str(), url::Component(0, path.length())); 293 replacements.SetPath(path.c_str(), url::Component(0, path.length()));
331 return url.ReplaceComponents(replacements); 294 return url.ReplaceComponents(replacements);
332 } 295 }
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 #endif // defined(ENALBE_EXTENSIONS) 552 #endif // defined(ENALBE_EXTENSIONS)
590 553
591 } // namespace 554 } // namespace
592 555
593 namespace chrome { 556 namespace chrome {
594 557
595 ChromeContentBrowserClient::ChromeContentBrowserClient() 558 ChromeContentBrowserClient::ChromeContentBrowserClient()
596 : prerender_tracker_(NULL), 559 : prerender_tracker_(NULL),
597 weak_factory_(this) { 560 weak_factory_(this) {
598 #if defined(ENABLE_PLUGINS) 561 #if defined(ENABLE_PLUGINS)
599 for (size_t i = 0; i < arraysize(kPredefinedAllowedDevChannelOrigins); ++i) 562 plugin_parts_ = new plugins::ChromeContentBrowserClientPluginsPart;
600 allowed_dev_channel_origins_.insert(kPredefinedAllowedDevChannelOrigins[i]);
601 for (size_t i = 0; i < arraysize(kPredefinedAllowedFileHandleOrigins); ++i)
602 allowed_file_handle_origins_.insert(kPredefinedAllowedFileHandleOrigins[i]);
603 for (size_t i = 0; i < arraysize(kPredefinedAllowedSocketOrigins); ++i)
604 allowed_socket_origins_.insert(kPredefinedAllowedSocketOrigins[i]);
605 #endif 563 #endif
606 564
607 #if !defined(OS_ANDROID) 565 #if !defined(OS_ANDROID)
608 TtsExtensionEngine* tts_extension_engine = TtsExtensionEngine::GetInstance(); 566 TtsExtensionEngine* tts_extension_engine = TtsExtensionEngine::GetInstance();
609 TtsController::GetInstance()->SetTtsEngineDelegate(tts_extension_engine); 567 TtsController::GetInstance()->SetTtsEngineDelegate(tts_extension_engine);
610 #endif 568 #endif
611 569
612 #if defined(ENABLE_EXTENSIONS) 570 #if defined(ENABLE_EXTENSIONS)
613 extra_parts_.push_back(new ChromeContentBrowserClientExtensionsPart); 571 extra_parts_.push_back(new ChromeContentBrowserClientExtensionsPart);
614 #endif 572 #endif
615 } 573 }
616 574
617 ChromeContentBrowserClient::~ChromeContentBrowserClient() { 575 ChromeContentBrowserClient::~ChromeContentBrowserClient() {
618 for (int i = static_cast<int>(extra_parts_.size()) - 1; i >= 0; --i) 576 for (int i = static_cast<int>(extra_parts_.size()) - 1; i >= 0; --i)
619 delete extra_parts_[i]; 577 delete extra_parts_[i];
620 extra_parts_.clear(); 578 extra_parts_.clear();
579
580 #if defined(ENABLE_PLUGINS)
581 if (plugin_parts_)
582 delete plugin_parts_;
583 #endif
621 } 584 }
622 585
623 // static 586 // static
624 void ChromeContentBrowserClient::RegisterProfilePrefs( 587 void ChromeContentBrowserClient::RegisterProfilePrefs(
625 user_prefs::PrefRegistrySyncable* registry) { 588 user_prefs::PrefRegistrySyncable* registry) {
626 registry->RegisterBooleanPref( 589 registry->RegisterBooleanPref(
627 prefs::kDisable3DAPIs, 590 prefs::kDisable3DAPIs,
628 false, 591 false,
629 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 592 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
630 registry->RegisterBooleanPref( 593 registry->RegisterBooleanPref(
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 766
804 void ChromeContentBrowserClient::RenderProcessWillLaunch( 767 void ChromeContentBrowserClient::RenderProcessWillLaunch(
805 content::RenderProcessHost* host) { 768 content::RenderProcessHost* host) {
806 int id = host->GetID(); 769 int id = host->GetID();
807 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); 770 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext());
808 net::URLRequestContextGetter* context = 771 net::URLRequestContextGetter* context =
809 profile->GetRequestContextForRenderProcess(id); 772 profile->GetRequestContextForRenderProcess(id);
810 773
811 host->AddFilter(new ChromeRenderMessageFilter(id, profile)); 774 host->AddFilter(new ChromeRenderMessageFilter(id, profile));
812 #if defined(ENABLE_PLUGINS) 775 #if defined(ENABLE_PLUGINS)
813 host->AddFilter(new PluginInfoMessageFilter(id, profile)); 776 plugin_parts_->RenderProcessWillLaunch(host);
Lei Zhang 2014/11/18 03:14:46 The goal is to get rid of the ifdefs in this file,
814 #endif 777 #endif
815 host->AddFilter(new cast::CastTransportHostFilter); 778 host->AddFilter(new cast::CastTransportHostFilter);
816 #if defined(ENABLE_PRINTING) 779 #if defined(ENABLE_PRINTING)
817 host->AddFilter(new printing::PrintingMessageFilter(id, profile)); 780 host->AddFilter(new printing::PrintingMessageFilter(id, profile));
818 #endif 781 #endif
819 host->AddFilter(new SearchProviderInstallStateMessageFilter(id, profile)); 782 host->AddFilter(new SearchProviderInstallStateMessageFilter(id, profile));
820 #if defined(ENABLE_SPELLCHECK) 783 #if defined(ENABLE_SPELLCHECK)
821 host->AddFilter(new SpellCheckMessageFilter(id)); 784 host->AddFilter(new SpellCheckMessageFilter(id));
822 #endif 785 #endif
823 #if defined(OS_MACOSX) 786 #if defined(OS_MACOSX)
(...skipping 1476 matching lines...) Expand 10 before | Expand all | Expand 10 after
2300 } 2263 }
2301 #endif 2264 #endif
2302 return NULL; 2265 return NULL;
2303 } 2266 }
2304 2267
2305 bool ChromeContentBrowserClient::AllowPepperSocketAPI( 2268 bool ChromeContentBrowserClient::AllowPepperSocketAPI(
2306 content::BrowserContext* browser_context, 2269 content::BrowserContext* browser_context,
2307 const GURL& url, 2270 const GURL& url,
2308 bool private_api, 2271 bool private_api,
2309 const content::SocketPermissionRequest* params) { 2272 const content::SocketPermissionRequest* params) {
2310 #if defined(ENABLE_EXTENSIONS) 2273 #if defined(ENABLE_PLUGINS)
2311 Profile* profile = Profile::FromBrowserContext(browser_context); 2274 return plugin_parts_->AllowPepperSocketAPI(
2312 const extensions::ExtensionSet* extension_set = NULL; 2275 browser_context, url, private_api, params);
2313 if (profile) {
2314 const ExtensionService* ext_service =
2315 extensions::ExtensionSystem::Get(profile)->extension_service();
2316 if (ext_service) {
2317 extension_set = ext_service->extensions();
2318 }
2319 }
2320
2321 if (private_api) {
2322 // Access to private socket APIs is controlled by the whitelist.
2323 if (IsExtensionOrSharedModuleWhitelisted(url, extension_set,
2324 allowed_socket_origins_)) {
2325 return true;
2326 }
2327 } else {
2328 // Access to public socket APIs is controlled by extension permissions.
2329 if (url.is_valid() && url.SchemeIs(extensions::kExtensionScheme) &&
2330 extension_set) {
2331 const Extension* extension = extension_set->GetByID(url.host());
2332 if (extension) {
2333 const extensions::PermissionsData* permissions_data =
2334 extension->permissions_data();
2335 if (params) {
2336 extensions::SocketPermission::CheckParam check_params(
2337 params->type, params->host, params->port);
2338 if (permissions_data->CheckAPIPermissionWithParam(
2339 extensions::APIPermission::kSocket, &check_params)) {
2340 return true;
2341 }
2342 } else if (permissions_data->HasAPIPermission(
2343 extensions::APIPermission::kSocket)) {
2344 return true;
2345 }
2346 }
2347 }
2348 }
2349
2350 // Allow both public and private APIs if the command line says so.
2351 return IsHostAllowedByCommandLine(url, extension_set,
2352 switches::kAllowNaClSocketAPI);
2353 #else 2276 #else
2354 return false; 2277 return false;
2355 #endif 2278 #endif
2356 } 2279 }
2357 2280
2358 ui::SelectFilePolicy* ChromeContentBrowserClient::CreateSelectFilePolicy( 2281 ui::SelectFilePolicy* ChromeContentBrowserClient::CreateSelectFilePolicy(
2359 WebContents* web_contents) { 2282 WebContents* web_contents) {
2360 return new ChromeSelectFilePolicy(web_contents); 2283 return new ChromeSelectFilePolicy(web_contents);
2361 } 2284 }
2362 2285
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
2519 #if defined(OS_ANDROID) 2442 #if defined(OS_ANDROID)
2520 return new DevToolsManagerDelegateAndroid(); 2443 return new DevToolsManagerDelegateAndroid();
2521 #else 2444 #else
2522 return new ChromeDevToolsManagerDelegate(); 2445 return new ChromeDevToolsManagerDelegate();
2523 #endif 2446 #endif
2524 } 2447 }
2525 2448
2526 bool ChromeContentBrowserClient::IsPluginAllowedToCallRequestOSFileHandle( 2449 bool ChromeContentBrowserClient::IsPluginAllowedToCallRequestOSFileHandle(
2527 content::BrowserContext* browser_context, 2450 content::BrowserContext* browser_context,
2528 const GURL& url) { 2451 const GURL& url) {
2529 #if defined(ENABLE_EXTENSIONS) 2452 #if defined(ENABLE_PLUGINS)
2530 Profile* profile = Profile::FromBrowserContext(browser_context); 2453 return plugin_parts_->IsPluginAllowedToCallRequestOSFileHandle(
2531 const extensions::ExtensionSet* extension_set = NULL; 2454 browser_context, url);
2532 if (profile) {
2533 const ExtensionService* ext_service =
2534 extensions::ExtensionSystem::Get(profile)->extension_service();
2535 if (ext_service) {
2536 extension_set = ext_service->extensions();
2537 }
2538 }
2539 return IsExtensionOrSharedModuleWhitelisted(url, extension_set,
2540 allowed_file_handle_origins_) ||
2541 IsHostAllowedByCommandLine(url, extension_set,
2542 switches::kAllowNaClFileHandleAPI);
2543 #else 2455 #else
2544 return false; 2456 return false;
2545 #endif 2457 #endif
2546 } 2458 }
2547 2459
2548 bool ChromeContentBrowserClient::IsPluginAllowedToUseDevChannelAPIs( 2460 bool ChromeContentBrowserClient::IsPluginAllowedToUseDevChannelAPIs(
2549 content::BrowserContext* browser_context, 2461 content::BrowserContext* browser_context,
2550 const GURL& url) { 2462 const GURL& url) {
2551 #if defined(ENABLE_EXTENSIONS) 2463 #if defined(ENABLE_PLUGINS)
2552 // Allow access for tests. 2464 // Allow access for tests.
2553 if (CommandLine::ForCurrentProcess()->HasSwitch( 2465 if (CommandLine::ForCurrentProcess()->HasSwitch(
2554 switches::kEnablePepperTesting)) { 2466 switches::kEnablePepperTesting)) {
2555 return true; 2467 return true;
2556 } 2468 }
2557 2469 return plugin_parts_->IsPluginAllowedToUseDevChannelAPIs(browser_context,
2558 Profile* profile = Profile::FromBrowserContext(browser_context); 2470 url);
2559 const extensions::ExtensionSet* extension_set = NULL;
2560 if (profile) {
2561 const ExtensionService* ext_service =
2562 extensions::ExtensionSystem::Get(profile)->extension_service();
2563 if (ext_service) {
2564 extension_set = ext_service->extensions();
2565 }
2566 }
2567
2568 // Allow access for whitelisted applications.
2569 if (IsExtensionOrSharedModuleWhitelisted(url,
2570 extension_set,
2571 allowed_dev_channel_origins_)) {
2572 return true;
2573 }
2574
2575 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
2576 // Allow dev channel APIs to be used on "Canary", "Dev", and "Unknown"
2577 // releases of Chrome. Permitting "Unknown" allows these APIs to be used on
2578 // Chromium builds as well.
2579 return channel <= chrome::VersionInfo::CHANNEL_DEV;
2580 #else 2471 #else
2581 return false; 2472 return false;
2582 #endif 2473 #endif
2583 } 2474 }
2584 2475
2585 net::CookieStore* 2476 net::CookieStore*
2586 ChromeContentBrowserClient::OverrideCookieStoreForRenderProcess( 2477 ChromeContentBrowserClient::OverrideCookieStoreForRenderProcess(
2587 int render_process_id) { 2478 int render_process_id) {
2588 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2479 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
2589 if (!prerender_tracker_) 2480 if (!prerender_tracker_)
(...skipping 19 matching lines...) Expand all
2609 switches::kDisableWebRtcEncryption, 2500 switches::kDisableWebRtcEncryption,
2610 }; 2501 };
2611 to_command_line->CopySwitchesFrom(from_command_line, 2502 to_command_line->CopySwitchesFrom(from_command_line,
2612 kWebRtcDevSwitchNames, 2503 kWebRtcDevSwitchNames,
2613 arraysize(kWebRtcDevSwitchNames)); 2504 arraysize(kWebRtcDevSwitchNames));
2614 } 2505 }
2615 } 2506 }
2616 #endif // defined(ENABLE_WEBRTC) 2507 #endif // defined(ENABLE_WEBRTC)
2617 2508
2618 } // namespace chrome 2509 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698