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

Side by Side Diff: chrome/renderer/chrome_content_renderer_client.cc

Issue 6873014: Clear RenderThread of any Chrome specific code, and move a bunch of stuff out of RenderView. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/renderer/chrome_content_renderer_client.h" 5 #include "chrome/renderer/chrome_content_renderer_client.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "base/path_service.h"
13 #include "base/utf_string_conversions.h"
12 #include "base/values.h" 14 #include "base/values.h"
13 #include "chrome/common/child_process_logging.h" 15 #include "chrome/common/child_process_logging.h"
16 #include "chrome/common/chrome_paths.h"
14 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/chrome_switches.h"
15 #include "chrome/common/extensions/extension.h" 18 #include "chrome/common/extensions/extension.h"
16 #include "chrome/common/extensions/extension_constants.h" 19 #include "chrome/common/extensions/extension_constants.h"
17 #include "chrome/common/extensions/extension_localization_peer.h" 20 #include "chrome/common/extensions/extension_localization_peer.h"
18 #include "chrome/common/extensions/extension_set.h" 21 #include "chrome/common/extensions/extension_set.h"
19 #include "chrome/common/jstemplate_builder.h" 22 #include "chrome/common/jstemplate_builder.h"
20 #include "chrome/common/render_messages.h" 23 #include "chrome/common/render_messages.h"
21 #include "chrome/common/url_constants.h" 24 #include "chrome/common/url_constants.h"
22 #include "chrome/renderer/autofill/autofill_agent.h" 25 #include "chrome/renderer/autofill/autofill_agent.h"
23 #include "chrome/renderer/autofill/form_manager.h" 26 #include "chrome/renderer/autofill/form_manager.h"
24 #include "chrome/renderer/autofill/password_autofill_manager.h" 27 #include "chrome/renderer/autofill/password_autofill_manager.h"
25 #include "chrome/renderer/automation/automation_renderer_helper.h" 28 #include "chrome/renderer/automation/automation_renderer_helper.h"
26 #include "chrome/renderer/automation/dom_automation_v8_extension.h" 29 #include "chrome/renderer/automation/dom_automation_v8_extension.h"
27 #include "chrome/renderer/blocked_plugin.h" 30 #include "chrome/renderer/blocked_plugin.h"
28 #include "chrome/renderer/chrome_render_observer.h" 31 #include "chrome/renderer/chrome_render_process_observer.h"
32 #include "chrome/renderer/chrome_render_view_observer.h"
29 #include "chrome/renderer/devtools_agent.h" 33 #include "chrome/renderer/devtools_agent.h"
30 #include "chrome/renderer/devtools_agent_filter.h" 34 #include "chrome/renderer/devtools_agent_filter.h"
31 #include "chrome/renderer/extensions/bindings_utils.h" 35 #include "chrome/renderer/extensions/bindings_utils.h"
32 #include "chrome/renderer/extensions/event_bindings.h" 36 #include "chrome/renderer/extensions/event_bindings.h"
33 #include "chrome/renderer/extensions/extension_dispatcher.h" 37 #include "chrome/renderer/extensions/extension_dispatcher.h"
34 #include "chrome/renderer/extensions/extension_helper.h" 38 #include "chrome/renderer/extensions/extension_helper.h"
35 #include "chrome/renderer/extensions/extension_process_bindings.h" 39 #include "chrome/renderer/extensions/extension_process_bindings.h"
36 #include "chrome/renderer/extensions/extension_resource_request_policy.h" 40 #include "chrome/renderer/extensions/extension_resource_request_policy.h"
37 #include "chrome/renderer/extensions/renderer_extension_bindings.h" 41 #include "chrome/renderer/extensions/renderer_extension_bindings.h"
38 #include "chrome/renderer/external_extension.h" 42 #include "chrome/renderer/external_extension.h"
(...skipping 18 matching lines...) Expand all
57 #include "content/common/view_messages.h" 61 #include "content/common/view_messages.h"
58 #include "content/renderer/render_thread.h" 62 #include "content/renderer/render_thread.h"
59 #include "content/renderer/render_view.h" 63 #include "content/renderer/render_view.h"
60 #include "grit/generated_resources.h" 64 #include "grit/generated_resources.h"
61 #include "grit/locale_settings.h" 65 #include "grit/locale_settings.h"
62 #include "grit/renderer_resources.h" 66 #include "grit/renderer_resources.h"
63 #include "net/base/net_errors.h" 67 #include "net/base/net_errors.h"
64 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" 68 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h"
65 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 69 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
66 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginParams.h" 70 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginParams.h"
71 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h"
67 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" 72 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h"
68 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLError.h" 73 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLError.h"
69 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" 74 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h"
70 #include "ui/base/l10n/l10n_util.h" 75 #include "ui/base/l10n/l10n_util.h"
71 #include "ui/base/resource/resource_bundle.h" 76 #include "ui/base/resource/resource_bundle.h"
72 #include "webkit/plugins/npapi/plugin_list.h" 77 #include "webkit/plugins/npapi/plugin_list.h"
73 #include "webkit/plugins/ppapi/plugin_module.h" 78 #include "webkit/plugins/ppapi/plugin_module.h"
74 79
75 #if defined(OS_MACOSX) 80 #if defined(OS_MACOSX)
76 #include "chrome/app/breakpad_mac.h" 81 #include "chrome/app/breakpad_mac.h"
77 #endif 82 #endif
78 83
79 using autofill::AutofillAgent; 84 using autofill::AutofillAgent;
80 using autofill::FormManager; 85 using autofill::FormManager;
81 using autofill::PasswordAutofillManager; 86 using autofill::PasswordAutofillManager;
82 using WebKit::WebCache; 87 using WebKit::WebCache;
83 using WebKit::WebFrame; 88 using WebKit::WebFrame;
84 using WebKit::WebPlugin; 89 using WebKit::WebPlugin;
85 using WebKit::WebPluginParams; 90 using WebKit::WebPluginParams;
91 using WebKit::WebSecurityPolicy;
86 using WebKit::WebString; 92 using WebKit::WebString;
87 using WebKit::WebURLError; 93 using WebKit::WebURLError;
88 using WebKit::WebURLRequest; 94 using WebKit::WebURLRequest;
89 using WebKit::WebURLResponse; 95 using WebKit::WebURLResponse;
90 using WebKit::WebVector; 96 using WebKit::WebVector;
91 97
92 namespace { 98 namespace {
93 99
94 static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */; 100 static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */;
95 101
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 215
210 namespace chrome { 216 namespace chrome {
211 217
212 ChromeContentRendererClient::ChromeContentRendererClient() { 218 ChromeContentRendererClient::ChromeContentRendererClient() {
213 } 219 }
214 220
215 ChromeContentRendererClient::~ChromeContentRendererClient() { 221 ChromeContentRendererClient::~ChromeContentRendererClient() {
216 } 222 }
217 223
218 void ChromeContentRendererClient::RenderThreadStarted() { 224 void ChromeContentRendererClient::RenderThreadStarted() {
225 chrome_observer_.reset(new ChromeRenderProcessObserver());
219 extension_dispatcher_.reset(new ExtensionDispatcher()); 226 extension_dispatcher_.reset(new ExtensionDispatcher());
220 histogram_snapshots_.reset(new RendererHistogramSnapshots()); 227 histogram_snapshots_.reset(new RendererHistogramSnapshots());
221 net_predictor_.reset(new RendererNetPredictor()); 228 net_predictor_.reset(new RendererNetPredictor());
222 spellcheck_.reset(new SpellCheck()); 229 spellcheck_.reset(new SpellCheck());
223 visited_link_slave_.reset(new VisitedLinkSlave()); 230 visited_link_slave_.reset(new VisitedLinkSlave());
224 phishing_classifier_.reset(new safe_browsing::PhishingClassifierFilter); 231 phishing_classifier_.reset(new safe_browsing::PhishingClassifierFilter);
225 232
226 RenderThread* thread = RenderThread::current(); 233 RenderThread* thread = RenderThread::current();
227 thread->AddFilter(new DevToolsAgentFilter()); 234 thread->AddFilter(new DevToolsAgentFilter());
228 #if defined(OS_POSIX) 235 #if defined(OS_POSIX)
229 thread->AddFilter(new SuicideOnChannelErrorFilter()); 236 thread->AddFilter(new SuicideOnChannelErrorFilter());
230 #endif 237 #endif
231 238
239 thread->AddObserver(chrome_observer_.get());
232 thread->AddObserver(extension_dispatcher_.get()); 240 thread->AddObserver(extension_dispatcher_.get());
233 thread->AddObserver(histogram_snapshots_.get()); 241 thread->AddObserver(histogram_snapshots_.get());
234 thread->AddObserver(phishing_classifier_.get()); 242 thread->AddObserver(phishing_classifier_.get());
235 thread->AddObserver(spellcheck_.get()); 243 thread->AddObserver(spellcheck_.get());
236 thread->AddObserver(visited_link_slave_.get()); 244 thread->AddObserver(visited_link_slave_.get());
237 245
238 thread->RegisterExtension(extensions_v8::ExternalExtension::Get()); 246 thread->RegisterExtension(extensions_v8::ExternalExtension::Get());
239 thread->RegisterExtension(extensions_v8::LoadTimesExtension::Get()); 247 thread->RegisterExtension(extensions_v8::LoadTimesExtension::Get());
240 thread->RegisterExtension(extensions_v8::SearchBoxExtension::Get()); 248 thread->RegisterExtension(extensions_v8::SearchBoxExtension::Get());
241 v8::Extension* search_extension = extensions_v8::SearchExtension::Get(); 249 v8::Extension* search_extension = extensions_v8::SearchExtension::Get();
242 // search_extension is null if not enabled. 250 // search_extension is null if not enabled.
243 if (search_extension) 251 if (search_extension)
244 thread->RegisterExtension(search_extension); 252 thread->RegisterExtension(search_extension);
245 253
246 if (CommandLine::ForCurrentProcess()->HasSwitch( 254 if (CommandLine::ForCurrentProcess()->HasSwitch(
247 switches::kDomAutomationController)) { 255 switches::kDomAutomationController)) {
248 thread->RegisterExtension(DomAutomationV8Extension::Get()); 256 thread->RegisterExtension(DomAutomationV8Extension::Get());
249 } 257 }
250 258
251 thread->resource_dispatcher()->set_observer(new RenderResourceObserver()); 259 thread->resource_dispatcher()->set_observer(new RenderResourceObserver());
260
261 // chrome: pages should not be accessible by normal content, and should
262 // also be unable to script anything but themselves (to help limit the damage
263 // that a corrupt chrome: page could cause).
264 WebString chrome_ui_scheme(ASCIIToUTF16(chrome::kChromeUIScheme));
265 WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(chrome_ui_scheme);
266
267 // chrome-extension: resources shouldn't trigger insecure content warnings.
268 WebString extension_scheme(ASCIIToUTF16(chrome::kExtensionScheme));
269 WebSecurityPolicy::registerURLSchemeAsSecure(extension_scheme);
252 } 270 }
253 271
254 void ChromeContentRendererClient::RenderViewCreated(RenderView* render_view) { 272 void ChromeContentRendererClient::RenderViewCreated(RenderView* render_view) {
255 safe_browsing::PhishingClassifierDelegate* phishing_classifier = NULL; 273 safe_browsing::PhishingClassifierDelegate* phishing_classifier = NULL;
256 #ifndef OS_CHROMEOS 274 #ifndef OS_CHROMEOS
257 if (!CommandLine::ForCurrentProcess()->HasSwitch( 275 if (!CommandLine::ForCurrentProcess()->HasSwitch(
258 switches::kDisableClientSidePhishingDetection)) { 276 switches::kDisableClientSidePhishingDetection)) {
259 phishing_classifier = 277 phishing_classifier =
260 new safe_browsing::PhishingClassifierDelegate(render_view, NULL); 278 new safe_browsing::PhishingClassifierDelegate(render_view, NULL);
261 } 279 }
(...skipping 12 matching lines...) Expand all
274 AutofillAgent* autofill_agent = new AutofillAgent(render_view, 292 AutofillAgent* autofill_agent = new AutofillAgent(render_view,
275 password_autofill_manager); 293 password_autofill_manager);
276 PageClickTracker* page_click_tracker = new PageClickTracker(render_view); 294 PageClickTracker* page_click_tracker = new PageClickTracker(render_view);
277 // Note that the order of insertion of the listeners is important. 295 // Note that the order of insertion of the listeners is important.
278 // The password_autocomplete_manager takes the first shot at processing the 296 // The password_autocomplete_manager takes the first shot at processing the
279 // notification and can stop the propagation. 297 // notification and can stop the propagation.
280 page_click_tracker->AddListener(password_autofill_manager); 298 page_click_tracker->AddListener(password_autofill_manager);
281 page_click_tracker->AddListener(autofill_agent); 299 page_click_tracker->AddListener(autofill_agent);
282 300
283 TranslateHelper* translate = new TranslateHelper(render_view, autofill_agent); 301 TranslateHelper* translate = new TranslateHelper(render_view, autofill_agent);
284 new ChromeRenderObserver(render_view, translate, phishing_classifier); 302 new ChromeRenderViewObserver(render_view, translate, phishing_classifier);
285 303
286 // Used only for testing/automation. 304 // Used only for testing/automation.
287 if (CommandLine::ForCurrentProcess()->HasSwitch( 305 if (CommandLine::ForCurrentProcess()->HasSwitch(
288 switches::kDomAutomationController)) { 306 switches::kDomAutomationController)) {
289 new AutomationRendererHelper(render_view); 307 new AutomationRendererHelper(render_view);
290 } 308 }
291 } 309 }
292 310
293 void ChromeContentRendererClient::SetNumberOfViews(int number_of_views) { 311 void ChromeContentRendererClient::SetNumberOfViews(int number_of_views) {
294 child_process_logging::SetNumberOfViews(number_of_views); 312 child_process_logging::SetNumberOfViews(number_of_views);
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 if (url.SchemeIs(chrome::kExtensionScheme) && 558 if (url.SchemeIs(chrome::kExtensionScheme) &&
541 !ExtensionResourceRequestPolicy::CanRequestResource( 559 !ExtensionResourceRequestPolicy::CanRequestResource(
542 url, GURL(frame->url()), extension_dispatcher_->extensions())) { 560 url, GURL(frame->url()), extension_dispatcher_->extensions())) {
543 *new_url = GURL("chrome-extension://invalid/"); 561 *new_url = GURL("chrome-extension://invalid/");
544 return true; 562 return true;
545 } 563 }
546 564
547 return false; 565 return false;
548 } 566 }
549 567
568 FilePath ChromeContentRendererClient::GetMediaLibraryPath() {
569 FilePath rv;
570 PathService::Get(chrome::DIR_MEDIA_LIBS, &rv);
571 return rv;
572 }
573
574 bool ChromeContentRendererClient::ShouldPumpEventsDuringCookieMessage() {
575 // We only need to pump events for chrome frame processes as the
576 // cookie policy is controlled by the host browser (IE). If the
577 // policy is set to prompt then the host would put up UI which
578 // would require plugins if any to also pump to ensure that we
579 // don't have a deadlock.
580 return CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeFrame);
581 }
582
550 void ChromeContentRendererClient::DidCreateScriptContext(WebFrame* frame) { 583 void ChromeContentRendererClient::DidCreateScriptContext(WebFrame* frame) {
551 EventBindings::HandleContextCreated( 584 EventBindings::HandleContextCreated(
552 frame, false, extension_dispatcher_.get()); 585 frame, false, extension_dispatcher_.get());
553 } 586 }
554 587
555 void ChromeContentRendererClient::DidDestroyScriptContext(WebFrame* frame) { 588 void ChromeContentRendererClient::DidDestroyScriptContext(WebFrame* frame) {
556 EventBindings::HandleContextDestroyed(frame); 589 EventBindings::HandleContextDestroyed(frame);
557 } 590 }
558 591
559 void ChromeContentRendererClient::DidCreateIsolatedScriptContext( 592 void ChromeContentRendererClient::DidCreateIsolatedScriptContext(
(...skipping 29 matching lines...) Expand all
589 if (old_url.is_empty() && frame->opener()) 622 if (old_url.is_empty() && frame->opener())
590 old_url = frame->opener()->url(); 623 old_url = frame->opener()->url();
591 624
592 bool old_url_is_hosted_app = extensions->GetByURL(old_url) && 625 bool old_url_is_hosted_app = extensions->GetByURL(old_url) &&
593 !extensions->GetByURL(old_url)->web_extent().is_empty(); 626 !extensions->GetByURL(old_url)->web_extent().is_empty();
594 return !extensions->InSameExtent(old_url, new_url) && 627 return !extensions->InSameExtent(old_url, new_url) &&
595 !old_url_is_hosted_app; 628 !old_url_is_hosted_app;
596 } 629 }
597 630
598 } // namespace chrome 631 } // namespace chrome
OLDNEW
« no previous file with comments | « chrome/renderer/chrome_content_renderer_client.h ('k') | chrome/renderer/chrome_render_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698