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

Side by Side Diff: chrome/browser/ui/tab_contents/tab_contents_wrapper.cc

Issue 7066039: Remove dependency on PrefChangeRegistrar and renderer_preferences_util from content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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/browser/ui/tab_contents/tab_contents_wrapper.h" 5 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "chrome/browser/autocomplete_history_manager.h" 9 #include "chrome/browser/autocomplete_history_manager.h"
10 #include "chrome/browser/autofill/autofill_manager.h" 10 #include "chrome/browser/autofill/autofill_manager.h"
11 #include "chrome/browser/automation/automation_tab_helper.h" 11 #include "chrome/browser/automation/automation_tab_helper.h"
12 #include "chrome/browser/content_settings/tab_specific_content_settings.h" 12 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
13 #include "chrome/browser/custom_handlers/protocol_handler.h" 13 #include "chrome/browser/custom_handlers/protocol_handler.h"
14 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" 14 #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
15 #include "chrome/browser/custom_handlers/register_protocol_handler_infobar_deleg ate.h" 15 #include "chrome/browser/custom_handlers/register_protocol_handler_infobar_deleg ate.h"
16 #include "chrome/browser/extensions/extension_tab_helper.h" 16 #include "chrome/browser/extensions/extension_tab_helper.h"
17 #include "chrome/browser/extensions/extension_webnavigation_api.h" 17 #include "chrome/browser/extensions/extension_webnavigation_api.h"
18 #include "chrome/browser/favicon/favicon_tab_helper.h" 18 #include "chrome/browser/favicon/favicon_tab_helper.h"
19 #include "chrome/browser/file_select_helper.h" 19 #include "chrome/browser/file_select_helper.h"
20 #include "chrome/browser/google/google_util.h"
20 #include "chrome/browser/history/history_tab_helper.h" 21 #include "chrome/browser/history/history_tab_helper.h"
21 #include "chrome/browser/omnibox_search_hint.h" 22 #include "chrome/browser/omnibox_search_hint.h"
22 #include "chrome/browser/password_manager/password_manager.h" 23 #include "chrome/browser/password_manager/password_manager.h"
23 #include "chrome/browser/password_manager_delegate_impl.h" 24 #include "chrome/browser/password_manager_delegate_impl.h"
24 #include "chrome/browser/pdf_unsupported_feature.h" 25 #include "chrome/browser/pdf_unsupported_feature.h"
25 #include "chrome/browser/plugin_observer.h" 26 #include "chrome/browser/plugin_observer.h"
26 #include "chrome/browser/prefs/pref_service.h" 27 #include "chrome/browser/prefs/pref_service.h"
27 #include "chrome/browser/prerender/prerender_observer.h" 28 #include "chrome/browser/prerender/prerender_observer.h"
28 #include "chrome/browser/printing/print_preview_message_handler.h" 29 #include "chrome/browser/printing/print_preview_message_handler.h"
29 #include "chrome/browser/profiles/profile.h" 30 #include "chrome/browser/profiles/profile.h"
31 #include "chrome/browser/renderer_preferences_util.h"
30 #include "chrome/browser/safe_browsing/client_side_detection_host.h" 32 #include "chrome/browser/safe_browsing/client_side_detection_host.h"
31 #include "chrome/browser/tab_contents/infobar_delegate.h" 33 #include "chrome/browser/tab_contents/infobar_delegate.h"
32 #include "chrome/browser/tab_contents/simple_alert_infobar_delegate.h" 34 #include "chrome/browser/tab_contents/simple_alert_infobar_delegate.h"
33 #include "chrome/browser/tab_contents/tab_contents_ssl_helper.h" 35 #include "chrome/browser/tab_contents/tab_contents_ssl_helper.h"
34 #include "chrome/browser/tab_contents/thumbnail_generator.h" 36 #include "chrome/browser/tab_contents/thumbnail_generator.h"
35 #include "chrome/browser/translate/translate_tab_helper.h" 37 #include "chrome/browser/translate/translate_tab_helper.h"
36 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" 38 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
37 #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h" 39 #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
38 #include "chrome/browser/ui/download/download_tab_helper.h" 40 #include "chrome/browser/ui/download/download_tab_helper.h"
39 #include "chrome/browser/ui/find_bar/find_tab_helper.h" 41 #include "chrome/browser/ui/find_bar/find_tab_helper.h"
40 #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" 42 #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
41 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper_delegate.h" 43 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper_delegate.h"
42 #include "chrome/common/chrome_switches.h" 44 #include "chrome/common/chrome_switches.h"
43 #include "chrome/common/pref_names.h" 45 #include "chrome/common/pref_names.h"
44 #include "chrome/common/render_messages.h" 46 #include "chrome/common/render_messages.h"
47 #include "content/browser/renderer_host/render_view_host.h"
45 #include "content/browser/tab_contents/tab_contents.h" 48 #include "content/browser/tab_contents/tab_contents.h"
46 #include "content/common/notification_service.h" 49 #include "content/common/notification_service.h"
47 #include "content/common/view_messages.h" 50 #include "content/common/view_messages.h"
48 #include "grit/generated_resources.h" 51 #include "grit/generated_resources.h"
49 #include "grit/locale_settings.h" 52 #include "grit/locale_settings.h"
50 #include "grit/platform_locale_settings.h" 53 #include "grit/platform_locale_settings.h"
51 #include "ui/base/l10n/l10n_util.h" 54 #include "ui/base/l10n/l10n_util.h"
52 #include "webkit/glue/webpreferences.h" 55 #include "webkit/glue/webpreferences.h"
53 56
57 namespace {
58
54 static base::LazyInstance<PropertyAccessor<TabContentsWrapper*> > 59 static base::LazyInstance<PropertyAccessor<TabContentsWrapper*> >
55 g_tab_contents_wrapper_property_accessor(base::LINKER_INITIALIZED); 60 g_tab_contents_wrapper_property_accessor(base::LINKER_INITIALIZED);
56 61
62 // The list of prefs we want to observe.
63 const char* kPrefsToObserve[] = {
64 prefs::kAlternateErrorPagesEnabled,
65 prefs::kDefaultCharset,
66 prefs::kDefaultZoomLevel,
67 prefs::kEnableReferrers
68 };
Avi (use Gerrit) 2011/05/25 02:34:34 This is a significantly shorter list than the one
jam 2011/05/25 16:00:59 I don't know why the old code was watching a long
69
70 const int kPrefsToObserveLength = arraysize(kPrefsToObserve);
71
72 }
73
57 //////////////////////////////////////////////////////////////////////////////// 74 ////////////////////////////////////////////////////////////////////////////////
58 // TabContentsWrapper, public: 75 // TabContentsWrapper, public:
59 76
60 TabContentsWrapper::TabContentsWrapper(TabContents* contents) 77 TabContentsWrapper::TabContentsWrapper(TabContents* contents)
61 : TabContentsObserver(contents), 78 : TabContentsObserver(contents),
62 delegate_(NULL), 79 delegate_(NULL),
63 infobars_enabled_(true), 80 infobars_enabled_(true),
64 tab_contents_(contents) { 81 tab_contents_(contents) {
65 DCHECK(contents); 82 DCHECK(contents);
66 DCHECK(!GetCurrentWrapperForContents(contents)); 83 DCHECK(!GetCurrentWrapperForContents(contents));
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 // Start the in-browser thumbnailing if the feature is enabled. 117 // Start the in-browser thumbnailing if the feature is enabled.
101 if (CommandLine::ForCurrentProcess()->HasSwitch( 118 if (CommandLine::ForCurrentProcess()->HasSwitch(
102 switches::kEnableInBrowserThumbnailing)) { 119 switches::kEnableInBrowserThumbnailing)) {
103 thumbnail_generation_observer_.reset(new ThumbnailGenerator); 120 thumbnail_generation_observer_.reset(new ThumbnailGenerator);
104 thumbnail_generation_observer_->StartThumbnailing(tab_contents_.get()); 121 thumbnail_generation_observer_->StartThumbnailing(tab_contents_.get());
105 } 122 }
106 123
107 // Set-up the showing of the omnibox search infobar if applicable. 124 // Set-up the showing of the omnibox search infobar if applicable.
108 if (OmniboxSearchHint::IsEnabled(contents->profile())) 125 if (OmniboxSearchHint::IsEnabled(contents->profile()))
109 omnibox_search_hint_.reset(new OmniboxSearchHint(this)); 126 omnibox_search_hint_.reset(new OmniboxSearchHint(this));
127
128 registrar_.Add(this, NotificationType::GOOGLE_URL_UPDATED,
129 NotificationService::AllSources());
130 registrar_.Add(this, NotificationType::USER_STYLE_SHEET_UPDATED,
131 NotificationService::AllSources());
132 #if defined(OS_LINUX)
133 registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED,
134 NotificationService::AllSources());
135 #endif
136
137 // Register for notifications about all interested prefs change.
138 PrefService* prefs = profile()->GetPrefs();
139 pref_change_registrar_.Init(prefs);
140 if (prefs) {
141 for (int i = 0; i < kPrefsToObserveLength; ++i)
142 pref_change_registrar_.Add(kPrefsToObserve[i], this);
143 }
144
145 renderer_preferences_util::UpdateFromSystemSettings(
146 tab_contents()->GetMutableRendererPrefs(), profile());
110 } 147 }
111 148
112 TabContentsWrapper::~TabContentsWrapper() { 149 TabContentsWrapper::~TabContentsWrapper() {
113 // Notify any lasting InfobarDelegates that have not yet been removed that 150 // Notify any lasting InfobarDelegates that have not yet been removed that
114 // whatever infobar they were handling in this TabContents has closed, 151 // whatever infobar they were handling in this TabContents has closed,
115 // because the TabContents is going away entirely. 152 // because the TabContents is going away entirely.
116 // This must happen after the TAB_CONTENTS_DESTROYED notification as the 153 // This must happen after the TAB_CONTENTS_DESTROYED notification as the
117 // notification may trigger infobars calls that access their delegate. (and 154 // notification may trigger infobars calls that access their delegate. (and
118 // some implementations of InfoBarDelegate do delete themselves on 155 // some implementations of InfoBarDelegate do delete themselves on
119 // InfoBarClosed()). 156 // InfoBarClosed()).
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 TabContents* contents) { 318 TabContents* contents) {
282 TabContentsWrapper** wrapper = 319 TabContentsWrapper** wrapper =
283 property_accessor()->GetProperty(contents->property_bag()); 320 property_accessor()->GetProperty(contents->property_bag());
284 321
285 return wrapper ? *wrapper : NULL; 322 return wrapper ? *wrapper : NULL;
286 } 323 }
287 324
288 //////////////////////////////////////////////////////////////////////////////// 325 ////////////////////////////////////////////////////////////////////////////////
289 // TabContentsWrapper implementation: 326 // TabContentsWrapper implementation:
290 327
328 void TabContentsWrapper::RenderViewCreated(RenderViewHost* render_view_host) {
329 UpdateAlternateErrorPageURL(render_view_host);
330 }
331
291 void TabContentsWrapper::RenderViewGone() { 332 void TabContentsWrapper::RenderViewGone() {
292 // Remove all infobars. 333 // Remove all infobars.
293 while (!infobar_delegates_.empty()) 334 while (!infobar_delegates_.empty())
294 RemoveInfoBar(GetInfoBarDelegateAt(infobar_count() - 1)); 335 RemoveInfoBar(GetInfoBarDelegateAt(infobar_count() - 1));
295 } 336 }
296 337
297 bool TabContentsWrapper::OnMessageReceived(const IPC::Message& message) { 338 bool TabContentsWrapper::OnMessageReceived(const IPC::Message& message) {
298 bool handled = true; 339 bool handled = true;
299 IPC_BEGIN_MESSAGE_MAP(TabContentsWrapper, message) 340 IPC_BEGIN_MESSAGE_MAP(TabContentsWrapper, message)
300 IPC_MESSAGE_HANDLER(ViewHostMsg_JSOutOfMemory, OnJSOutOfMemory) 341 IPC_MESSAGE_HANDLER(ViewHostMsg_JSOutOfMemory, OnJSOutOfMemory)
(...skipping 22 matching lines...) Expand all
323 // use iterators, as the RemoveInfoBar() call synchronously modifies our 364 // use iterators, as the RemoveInfoBar() call synchronously modifies our
324 // delegate list. 365 // delegate list.
325 for (size_t i = infobar_delegates_.size(); i > 0; --i) { 366 for (size_t i = infobar_delegates_.size(); i > 0; --i) {
326 InfoBarDelegate* delegate = infobar_delegates_[i - 1]; 367 InfoBarDelegate* delegate = infobar_delegates_[i - 1];
327 if (delegate->ShouldExpire(committed_details)) 368 if (delegate->ShouldExpire(committed_details))
328 RemoveInfoBar(delegate); 369 RemoveInfoBar(delegate);
329 } 370 }
330 371
331 break; 372 break;
332 } 373 }
374 case NotificationType::GOOGLE_URL_UPDATED:
375 UpdateAlternateErrorPageURL(render_view_host());
376 break;
377 case NotificationType::USER_STYLE_SHEET_UPDATED:
378 UpdateWebPreferences();
379 break;
380 #if defined(OS_LINUX)
381 case NotificationType::BROWSER_THEME_CHANGED: {
382 UpdateRendererPreferences();
383 break;
384 }
385 #endif
386 case NotificationType::PREF_CHANGED: {
387 std::string* pref_name_in = Details<std::string>(details).ptr();
388 DCHECK(Source<PrefService>(source).ptr() == profile()->GetPrefs());
389 if (*pref_name_in == prefs::kAlternateErrorPagesEnabled) {
390 UpdateAlternateErrorPageURL(render_view_host());
391 } else if ((*pref_name_in == prefs::kDefaultCharset) ||
392 StartsWithASCII(*pref_name_in, "webkit.webprefs.", true)) {
393 UpdateWebPreferences();
394 } else if (*pref_name_in == prefs::kDefaultZoomLevel) {
395 Send(new ViewMsg_SetZoomLevel(
396 routing_id(), tab_contents()->GetZoomLevel()));
397 } else if (*pref_name_in == prefs::kEnableReferrers) {
398 UpdateRendererPreferences();
399 } else {
400 NOTREACHED() << "unexpected pref change notification" << *pref_name_in;
401 }
402 break;
403 }
333 default: 404 default:
334 NOTREACHED(); 405 NOTREACHED();
335 } 406 }
336 } 407 }
337 408
338 void TabContentsWrapper::AddInfoBar(InfoBarDelegate* delegate) { 409 void TabContentsWrapper::AddInfoBar(InfoBarDelegate* delegate) {
339 if (!infobars_enabled_) { 410 if (!infobars_enabled_) {
340 delegate->InfoBarClosed(); 411 delegate->InfoBarClosed();
341 return; 412 return;
342 } 413 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 void TabContentsWrapper::OnSnapshot(const SkBitmap& bitmap) { 522 void TabContentsWrapper::OnSnapshot(const SkBitmap& bitmap) {
452 NotificationService::current()->Notify( 523 NotificationService::current()->Notify(
453 NotificationType::TAB_SNAPSHOT_TAKEN, 524 NotificationType::TAB_SNAPSHOT_TAKEN,
454 Source<TabContentsWrapper>(this), 525 Source<TabContentsWrapper>(this),
455 Details<const SkBitmap>(&bitmap)); 526 Details<const SkBitmap>(&bitmap));
456 } 527 }
457 528
458 void TabContentsWrapper::OnPDFHasUnsupportedFeature() { 529 void TabContentsWrapper::OnPDFHasUnsupportedFeature() {
459 PDFHasUnsupportedFeature(this); 530 PDFHasUnsupportedFeature(this);
460 } 531 }
532
533 GURL TabContentsWrapper::GetAlternateErrorPageURL() const {
534 GURL url;
535 // Disable alternate error pages when in OffTheRecord/Incognito mode.
Avi (use Gerrit) 2011/05/25 02:34:34 Ok to just say "incognito". References to OTR are
jam 2011/05/25 16:00:59 Done.
536 if (profile()->IsOffTheRecord())
537 return url;
538
539 PrefService* prefs = profile()->GetPrefs();
540 if (prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled)) {
541 url = google_util::AppendGoogleLocaleParam(
542 GURL(google_util::kLinkDoctorBaseURL));
543 url = google_util::AppendGoogleTLDParam(url);
544 }
545 return url;
546 }
547
548 void TabContentsWrapper::UpdateAlternateErrorPageURL(RenderViewHost* rvh) {
549 rvh->Send(new ViewMsg_SetAltErrorPageURL(
550 rvh->routing_id(), GetAlternateErrorPageURL()));
551 }
552
553 void TabContentsWrapper::UpdateWebPreferences() {
554 RenderViewHostDelegate* rvhd = tab_contents();
555 Send(new ViewMsg_UpdateWebPreferences(routing_id(), rvhd->GetWebkitPrefs()));
556 }
557
558 void TabContentsWrapper::UpdateRendererPreferences() {
559 renderer_preferences_util::UpdateFromSystemSettings(
560 tab_contents()->GetMutableRendererPrefs(), profile());
561 render_view_host()->SyncRendererPrefs();
562 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698