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

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

Issue 8775064: Make PerTabPrefsTabHelper into PrefsTabHelper, move all prefs code into it. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: this one instead Created 9 years 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
« no previous file with comments | « chrome/browser/ui/tab_contents/tab_contents_wrapper.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/utf_string_conversions.h"
8
9 #include "base/command_line.h" 7 #include "base/command_line.h"
10 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
11 #include "base/stringprintf.h"
12 #include "chrome/browser/autocomplete_history_manager.h" 9 #include "chrome/browser/autocomplete_history_manager.h"
13 #include "chrome/browser/autofill/autofill_external_delegate.h" 10 #include "chrome/browser/autofill/autofill_external_delegate.h"
14 #include "chrome/browser/autofill/autofill_manager.h" 11 #include "chrome/browser/autofill/autofill_manager.h"
15 #include "chrome/browser/automation/automation_tab_helper.h" 12 #include "chrome/browser/automation/automation_tab_helper.h"
16 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
17 #include "chrome/browser/content_settings/tab_specific_content_settings.h" 14 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
18 #include "chrome/browser/download/download_request_limiter_observer.h" 15 #include "chrome/browser/download/download_request_limiter_observer.h"
19 #include "chrome/browser/extensions/extension_tab_helper.h" 16 #include "chrome/browser/extensions/extension_tab_helper.h"
20 #include "chrome/browser/extensions/extension_webnavigation_api.h" 17 #include "chrome/browser/extensions/extension_webnavigation_api.h"
21 #include "chrome/browser/external_protocol/external_protocol_observer.h" 18 #include "chrome/browser/external_protocol/external_protocol_observer.h"
22 #include "chrome/browser/favicon/favicon_tab_helper.h" 19 #include "chrome/browser/favicon/favicon_tab_helper.h"
23 #include "chrome/browser/google/google_util.h" 20 #include "chrome/browser/google/google_util.h"
24 #include "chrome/browser/history/history_tab_helper.h" 21 #include "chrome/browser/history/history_tab_helper.h"
25 #include "chrome/browser/infobars/infobar_tab_helper.h" 22 #include "chrome/browser/infobars/infobar_tab_helper.h"
26 #include "chrome/browser/omnibox_search_hint.h" 23 #include "chrome/browser/omnibox_search_hint.h"
27 #include "chrome/browser/password_manager/password_manager.h" 24 #include "chrome/browser/password_manager/password_manager.h"
28 #include "chrome/browser/password_manager_delegate_impl.h" 25 #include "chrome/browser/password_manager_delegate_impl.h"
29 #include "chrome/browser/pdf_unsupported_feature.h" 26 #include "chrome/browser/pdf_unsupported_feature.h"
30 #include "chrome/browser/plugin_observer.h" 27 #include "chrome/browser/plugin_observer.h"
31 #include "chrome/browser/prefs/pref_service.h" 28 #include "chrome/browser/prefs/pref_service.h"
32 #include "chrome/browser/prerender/prerender_tab_helper.h" 29 #include "chrome/browser/prerender/prerender_tab_helper.h"
33 #include "chrome/browser/printing/print_preview_message_handler.h" 30 #include "chrome/browser/printing/print_preview_message_handler.h"
34 #include "chrome/browser/printing/print_view_manager.h" 31 #include "chrome/browser/printing/print_view_manager.h"
32 #include "chrome/browser/profiles/profile.h"
35 #include "chrome/browser/renderer_host/web_cache_manager.h" 33 #include "chrome/browser/renderer_host/web_cache_manager.h"
36 #include "chrome/browser/renderer_preferences_util.h"
37 #include "chrome/browser/sessions/restore_tab_helper.h" 34 #include "chrome/browser/sessions/restore_tab_helper.h"
38 #include "chrome/browser/safe_browsing/client_side_detection_host.h" 35 #include "chrome/browser/safe_browsing/client_side_detection_host.h"
39 #include "chrome/browser/tab_contents/tab_contents_ssl_helper.h" 36 #include "chrome/browser/tab_contents/tab_contents_ssl_helper.h"
40 #include "chrome/browser/tab_contents/thumbnail_generator.h" 37 #include "chrome/browser/tab_contents/thumbnail_generator.h"
41 #include "chrome/browser/themes/theme_service.h"
42 #include "chrome/browser/themes/theme_service_factory.h"
43 #include "chrome/browser/translate/translate_tab_helper.h" 38 #include "chrome/browser/translate/translate_tab_helper.h"
44 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" 39 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
45 #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h" 40 #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
46 #include "chrome/browser/ui/constrained_window_tab_helper.h" 41 #include "chrome/browser/ui/constrained_window_tab_helper.h"
47 #include "chrome/browser/ui/find_bar/find_tab_helper.h" 42 #include "chrome/browser/ui/find_bar/find_tab_helper.h"
48 #include "chrome/browser/ui/intents/web_intent_picker_factory_impl.h" 43 #include "chrome/browser/ui/intents/web_intent_picker_factory_impl.h"
49 #include "chrome/browser/ui/intents/web_intent_picker_controller.h" 44 #include "chrome/browser/ui/intents/web_intent_picker_controller.h"
45 #include "chrome/browser/ui/prefs/prefs_tab_helper.h"
50 #include "chrome/browser/ui/sad_tab_observer.h" 46 #include "chrome/browser/ui/sad_tab_observer.h"
51 #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" 47 #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
52 #include "chrome/browser/ui/sync/tab_contents_wrapper_synced_tab_delegate.h" 48 #include "chrome/browser/ui/sync/tab_contents_wrapper_synced_tab_delegate.h"
53 #include "chrome/browser/ui/tab_contents/per_tab_prefs_tab_helper.h"
54 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper_delegate.h"
55 #include "chrome/common/chrome_notification_types.h" 49 #include "chrome/common/chrome_notification_types.h"
56 #include "chrome/common/chrome_switches.h" 50 #include "chrome/common/chrome_switches.h"
57 #include "chrome/common/pref_names.h" 51 #include "chrome/common/pref_names.h"
58 #include "chrome/common/render_messages.h" 52 #include "chrome/common/render_messages.h"
59 #include "content/browser/renderer_host/render_view_host.h" 53 #include "content/browser/renderer_host/render_view_host.h"
60 #include "content/browser/tab_contents/tab_contents_view.h" 54 #include "content/public/browser/notification_details.h"
61 #include "content/public/browser/notification_service.h" 55 #include "content/public/browser/notification_service.h"
62 #include "grit/generated_resources.h" 56 #include "grit/generated_resources.h"
63 #include "grit/locale_settings.h" 57 #include "grit/locale_settings.h"
64 #include "grit/platform_locale_settings.h" 58 #include "grit/platform_locale_settings.h"
65 #include "ui/base/l10n/l10n_util.h" 59 #include "ui/base/l10n/l10n_util.h"
66 #include "webkit/glue/webpreferences.h"
67 60
68 namespace { 61 namespace {
69 62
70 static base::LazyInstance<base::PropertyAccessor<TabContentsWrapper*> > 63 static base::LazyInstance<base::PropertyAccessor<TabContentsWrapper*> >
71 g_tab_contents_wrapper_property_accessor = LAZY_INSTANCE_INITIALIZER; 64 g_tab_contents_wrapper_property_accessor = LAZY_INSTANCE_INITIALIZER;
72 65
73 // The list of prefs we want to observe. 66 // The list of prefs we want to observe.
74 const char* kPrefsToObserve[] = { 67 const char* kPrefsToObserve[] = {
75 prefs::kAlternateErrorPagesEnabled, 68 prefs::kAlternateErrorPagesEnabled,
76 prefs::kDefaultCharset,
77 prefs::kDefaultZoomLevel, 69 prefs::kDefaultZoomLevel,
78 prefs::kEnableReferrers,
79 #if defined (ENABLE_SAFE_BROWSING) 70 #if defined (ENABLE_SAFE_BROWSING)
80 prefs::kSafeBrowsingEnabled, 71 prefs::kSafeBrowsingEnabled,
81 #endif 72 #endif
82 prefs::kWebKitAllowDisplayingInsecureContent,
83 prefs::kWebKitAllowRunningInsecureContent,
84 prefs::kWebKitCursiveFontFamily,
85 prefs::kWebKitDefaultFixedFontSize,
86 prefs::kWebKitDefaultFontSize,
87 prefs::kWebKitFantasyFontFamily,
88 prefs::kWebKitFixedFontFamily,
89 prefs::kWebKitGlobalJavascriptEnabled,
90 prefs::kWebKitJavaEnabled,
91 prefs::kWebKitLoadsImagesAutomatically,
92 prefs::kWebKitMinimumFontSize,
93 prefs::kWebKitMinimumLogicalFontSize,
94 prefs::kWebKitPluginsEnabled,
95 prefs::kWebKitSansSerifFontFamily,
96 prefs::kWebKitSerifFontFamily,
97 prefs::kWebKitStandardFontFamily,
98 prefs::kWebkitTabsToLinks,
99 prefs::kWebKitUsesUniversalDetector
100 }; 73 };
101 74
102 const int kPrefsToObserveLength = arraysize(kPrefsToObserve); 75 const int kPrefsToObserveLength = arraysize(kPrefsToObserve);
103 76
104 // Registers a preference under the path |map_name| for each script used for
105 // per-script font prefs. For example, if |map_name| is "fonts.serif", then
106 // "fonts.serif.Arab", "fonts.serif.Hang", etc. are registered.
107 void RegisterFontFamilyMap(PrefService* prefs, const char* map_name) {
108 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) {
109 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i];
110 std::string pref_name_str = base::StringPrintf("%s.%s", map_name, script);
111 const char* pref_name = pref_name_str.c_str();
112 if (!prefs->FindPreference(pref_name))
113 prefs->RegisterStringPref(pref_name, "", PrefService::UNSYNCABLE_PREF);
114 }
115 }
116
117 // Registers |obs| to observe per-script font prefs under the path |map_name|.
118 void RegisterFontFamilyMapObserver(PrefChangeRegistrar* registrar,
119 const char* map_name,
120 content::NotificationObserver* obs) {
121 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) {
122 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i];
123 std::string pref_name = base::StringPrintf("%s.%s", map_name, script);
124 registrar->Add(pref_name.c_str(), obs);
125 }
126 }
127
128 struct PerScriptFontDefault {
129 const char* pref_name;
130 int resource_id;
131 const char* native_locale;
132 };
133
134 // Per-script font pref defaults. The prefs that have defaults vary by
135 // platform, since not all platforms have fonts for all scripts for all generic
136 // families.
137 // TODO(falken): add proper defaults when possible for all
138 // platforms/scripts/generic families.
139 const PerScriptFontDefault kPerScriptFontDefaults[] = {
140 #if defined(OS_CHROMEOS)
141 { prefs::kWebKitStandardFontFamilyArabic, IDS_STANDARD_FONT_FAMILY_ARABIC,
142 "ar" },
143 { prefs::kWebKitSerifFontFamilyArabic, IDS_SERIF_FONT_FAMILY_ARABIC, "ar" },
144 { prefs::kWebKitSansSerifFontFamilyArabic,
145 IDS_SANS_SERIF_FONT_FAMILY_ARABIC, "ar" },
146 { prefs::kWebKitStandardFontFamilyJapanese,
147 IDS_STANDARD_FONT_FAMILY_JAPANESE, "ja" },
148 { prefs::kWebKitFixedFontFamilyJapanese, IDS_FIXED_FONT_FAMILY_JAPANESE,
149 "ja" },
150 { prefs::kWebKitSerifFontFamilyJapanese, IDS_SERIF_FONT_FAMILY_JAPANESE,
151 "ja" },
152 { prefs::kWebKitSansSerifFontFamilyJapanese,
153 IDS_SANS_SERIF_FONT_FAMILY_JAPANESE, "ja" },
154 { prefs::kWebKitStandardFontFamilyKorean, IDS_STANDARD_FONT_FAMILY_KOREAN,
155 "ko" },
156 { prefs::kWebKitFixedFontFamilyKorean, IDS_FIXED_FONT_FAMILY_KOREAN, "ko" },
157 { prefs::kWebKitSerifFontFamilyKorean, IDS_SERIF_FONT_FAMILY_KOREAN, "ko" },
158 { prefs::kWebKitSansSerifFontFamilyKorean,
159 IDS_SANS_SERIF_FONT_FAMILY_KOREAN, "ko" },
160 { prefs::kWebKitStandardFontFamilySimplifiedHan,
161 IDS_STANDARD_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
162 { prefs::kWebKitFixedFontFamilySimplifiedHan,
163 IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
164 { prefs::kWebKitSerifFontFamilySimplifiedHan,
165 IDS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
166 { prefs::kWebKitSansSerifFontFamilySimplifiedHan,
167 IDS_SANS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
168 { prefs::kWebKitStandardFontFamilyTraditionalHan,
169 IDS_STANDARD_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" },
170 { prefs::kWebKitFixedFontFamilyTraditionalHan,
171 IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" },
172 { prefs::kWebKitSerifFontFamilyTraditionalHan,
173 IDS_SERIF_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" },
174 { prefs::kWebKitSansSerifFontFamilyTraditionalHan,
175 IDS_SANS_SERIF_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" }
176 #elif defined(OS_MACOSX)
177 { prefs::kWebKitStandardFontFamilyJapanese,
178 IDS_STANDARD_FONT_FAMILY_JAPANESE, "ja" },
179 { prefs::kWebKitFixedFontFamilyJapanese, IDS_FIXED_FONT_FAMILY_JAPANESE,
180 "ja" },
181 { prefs::kWebKitSerifFontFamilyJapanese, IDS_SERIF_FONT_FAMILY_JAPANESE,
182 "ja" },
183 { prefs::kWebKitSansSerifFontFamilyJapanese,
184 IDS_SANS_SERIF_FONT_FAMILY_JAPANESE, "ja" },
185 { prefs::kWebKitStandardFontFamilyKorean, IDS_STANDARD_FONT_FAMILY_KOREAN,
186 "ko" },
187 { prefs::kWebKitSerifFontFamilyKorean, IDS_SERIF_FONT_FAMILY_KOREAN, "ko" },
188 { prefs::kWebKitSansSerifFontFamilyKorean,
189 IDS_SANS_SERIF_FONT_FAMILY_KOREAN, "ko" },
190 { prefs::kWebKitStandardFontFamilySimplifiedHan,
191 IDS_STANDARD_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
192 { prefs::kWebKitSerifFontFamilySimplifiedHan,
193 IDS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
194 { prefs::kWebKitSansSerifFontFamilySimplifiedHan,
195 IDS_SANS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
196 { prefs::kWebKitStandardFontFamilyTraditionalHan,
197 IDS_STANDARD_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" },
198 { prefs::kWebKitSerifFontFamilyTraditionalHan,
199 IDS_SERIF_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" },
200 { prefs::kWebKitSansSerifFontFamilyTraditionalHan,
201 IDS_SANS_SERIF_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" }
202 #elif defined(OS_WIN)
203 { prefs::kWebKitStandardFontFamilyJapanese,
204 IDS_STANDARD_FONT_FAMILY_JAPANESE, "ja" },
205 { prefs::kWebKitFixedFontFamilyJapanese, IDS_FIXED_FONT_FAMILY_JAPANESE,
206 "ja" },
207 { prefs::kWebKitSerifFontFamilyJapanese, IDS_SERIF_FONT_FAMILY_JAPANESE,
208 "ja" },
209 { prefs::kWebKitSansSerifFontFamilyJapanese,
210 IDS_SANS_SERIF_FONT_FAMILY_JAPANESE, "ja" },
211 { prefs::kWebKitStandardFontFamilyKorean, IDS_STANDARD_FONT_FAMILY_KOREAN,
212 "ko" },
213 { prefs::kWebKitFixedFontFamilyKorean, IDS_FIXED_FONT_FAMILY_KOREAN, "ko" },
214 { prefs::kWebKitSerifFontFamilyKorean, IDS_SERIF_FONT_FAMILY_KOREAN, "ko" },
215 { prefs::kWebKitSansSerifFontFamilyKorean,
216 IDS_SANS_SERIF_FONT_FAMILY_KOREAN, "ko" },
217 { prefs::kWebKitCursiveFontFamilyKorean, IDS_CURSIVE_FONT_FAMILY_KOREAN,
218 "ko" },
219 { prefs::kWebKitStandardFontFamilySimplifiedHan,
220 IDS_STANDARD_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
221 { prefs::kWebKitFixedFontFamilySimplifiedHan,
222 IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
223 { prefs::kWebKitSerifFontFamilySimplifiedHan,
224 IDS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
225 { prefs::kWebKitSansSerifFontFamilySimplifiedHan,
226 IDS_SANS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN, "zh-CN" },
227 { prefs::kWebKitStandardFontFamilyTraditionalHan,
228 IDS_STANDARD_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" },
229 { prefs::kWebKitFixedFontFamilyTraditionalHan,
230 IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" },
231 { prefs::kWebKitSerifFontFamilyTraditionalHan,
232 IDS_SERIF_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" },
233 { prefs::kWebKitSansSerifFontFamilyTraditionalHan,
234 IDS_SANS_SERIF_FONT_FAMILY_TRADITIONAL_HAN, "zh-TW" }
235 #endif
236 };
237
238 #if defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN)
239 // To avoid Clang warning, only define kPerScriptFontDefaultsLength when it is
240 // non-zero. When it is zero, code like
241 // for (size_t i = 0; i < kPerScriptFontDefaultsLength; ++i)
242 // causes a warning due to comparison of unsigned expression < 0.
243 const size_t kPerScriptFontDefaultsLength = arraysize(kPerScriptFontDefaults);
244 #endif
245
246 } // namespace 77 } // namespace
247 78
248 //////////////////////////////////////////////////////////////////////////////// 79 ////////////////////////////////////////////////////////////////////////////////
249 // TabContentsWrapper, public: 80 // TabContentsWrapper, public:
250 81
251 TabContentsWrapper::TabContentsWrapper(TabContents* contents) 82 TabContentsWrapper::TabContentsWrapper(TabContents* contents)
252 : TabContentsObserver(contents), 83 : TabContentsObserver(contents),
253 delegate_(NULL), 84 delegate_(NULL),
254 in_destructor_(false), 85 in_destructor_(false),
255 tab_contents_(contents) { 86 tab_contents_(contents) {
256 DCHECK(contents); 87 DCHECK(contents);
257 DCHECK(!GetCurrentWrapperForContents(contents)); 88 DCHECK(!GetCurrentWrapperForContents(contents));
258 // Stash this in the property bag so it can be retrieved without having to 89 // Stash this in the property bag so it can be retrieved without having to
259 // go to a Browser. 90 // go to a Browser.
260 property_accessor()->SetProperty(contents->property_bag(), this); 91 property_accessor()->SetProperty(contents->property_bag(), this);
261 92
93 PrefService* prefs = profile()->GetPrefs();
94 pref_change_registrar_.Init(prefs);
95 if (prefs) {
96 for (int i = 0; i < kPrefsToObserveLength; ++i)
97 pref_change_registrar_.Add(kPrefsToObserve[i], this);
98 }
99
262 // Create the tab helpers. 100 // Create the tab helpers.
263 autocomplete_history_manager_.reset(new AutocompleteHistoryManager(contents)); 101 autocomplete_history_manager_.reset(new AutocompleteHistoryManager(contents));
264 autofill_manager_ = new AutofillManager(this); 102 autofill_manager_ = new AutofillManager(this);
265 if (CommandLine::ForCurrentProcess()->HasSwitch( 103 if (CommandLine::ForCurrentProcess()->HasSwitch(
266 switches::kExternalAutofillPopup)) { 104 switches::kExternalAutofillPopup)) {
267 autofill_external_delegate_.reset( 105 autofill_external_delegate_.reset(
268 AutofillExternalDelegate::Create(this, autofill_manager_.get())); 106 AutofillExternalDelegate::Create(this, autofill_manager_.get()));
269 autofill_manager_->SetExternalDelegate(autofill_external_delegate_.get()); 107 autofill_manager_->SetExternalDelegate(autofill_external_delegate_.get());
270 autocomplete_history_manager_->SetExternalDelegate( 108 autocomplete_history_manager_->SetExternalDelegate(
271 autofill_external_delegate_.get()); 109 autofill_external_delegate_.get());
272 } 110 }
273 automation_tab_helper_.reset(new AutomationTabHelper(contents)); 111 automation_tab_helper_.reset(new AutomationTabHelper(contents));
274 blocked_content_tab_helper_.reset(new BlockedContentTabHelper(this)); 112 blocked_content_tab_helper_.reset(new BlockedContentTabHelper(this));
275 bookmark_tab_helper_.reset(new BookmarkTabHelper(this)); 113 bookmark_tab_helper_.reset(new BookmarkTabHelper(this));
276 constrained_window_tab_helper_.reset(new ConstrainedWindowTabHelper(this)); 114 constrained_window_tab_helper_.reset(new ConstrainedWindowTabHelper(this));
277 extension_tab_helper_.reset(new ExtensionTabHelper(this)); 115 extension_tab_helper_.reset(new ExtensionTabHelper(this));
278 favicon_tab_helper_.reset(new FaviconTabHelper(contents)); 116 favicon_tab_helper_.reset(new FaviconTabHelper(contents));
279 find_tab_helper_.reset(new FindTabHelper(contents)); 117 find_tab_helper_.reset(new FindTabHelper(contents));
280 history_tab_helper_.reset(new HistoryTabHelper(contents)); 118 history_tab_helper_.reset(new HistoryTabHelper(contents));
281 infobar_tab_helper_.reset(new InfoBarTabHelper(contents)); 119 infobar_tab_helper_.reset(new InfoBarTabHelper(contents));
282 password_manager_delegate_.reset(new PasswordManagerDelegateImpl(this)); 120 password_manager_delegate_.reset(new PasswordManagerDelegateImpl(this));
283 password_manager_.reset( 121 password_manager_.reset(
284 new PasswordManager(contents, password_manager_delegate_.get())); 122 new PasswordManager(contents, password_manager_delegate_.get()));
285 per_tab_prefs_tab_helper_.reset(new PerTabPrefsTabHelper(this)); 123 prefs_tab_helper_.reset(new PrefsTabHelper(this));
286 prerender_tab_helper_.reset(new prerender::PrerenderTabHelper(this)); 124 prerender_tab_helper_.reset(new prerender::PrerenderTabHelper(this));
287 print_view_manager_.reset(new printing::PrintViewManager(this)); 125 print_view_manager_.reset(new printing::PrintViewManager(this));
288 restore_tab_helper_.reset(new RestoreTabHelper(this)); 126 restore_tab_helper_.reset(new RestoreTabHelper(this));
289 #if defined(ENABLE_SAFE_BROWSING) 127 #if defined(ENABLE_SAFE_BROWSING)
290 if (profile()->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled) && 128 if (profile()->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled) &&
291 g_browser_process->safe_browsing_detection_service()) { 129 g_browser_process->safe_browsing_detection_service()) {
292 safebrowsing_detection_host_.reset( 130 safebrowsing_detection_host_.reset(
293 safe_browsing::ClientSideDetectionHost::Create(contents)); 131 safe_browsing::ClientSideDetectionHost::Create(contents));
294 } 132 }
295 #endif 133 #endif
(...skipping 19 matching lines...) Expand all
315 thumbnail_generation_observer_.reset(new ThumbnailGenerator); 153 thumbnail_generation_observer_.reset(new ThumbnailGenerator);
316 thumbnail_generation_observer_->StartThumbnailing(tab_contents_.get()); 154 thumbnail_generation_observer_->StartThumbnailing(tab_contents_.get());
317 } 155 }
318 156
319 // Set-up the showing of the omnibox search infobar if applicable. 157 // Set-up the showing of the omnibox search infobar if applicable.
320 if (OmniboxSearchHint::IsEnabled(profile())) 158 if (OmniboxSearchHint::IsEnabled(profile()))
321 omnibox_search_hint_.reset(new OmniboxSearchHint(this)); 159 omnibox_search_hint_.reset(new OmniboxSearchHint(this));
322 160
323 registrar_.Add(this, chrome::NOTIFICATION_GOOGLE_URL_UPDATED, 161 registrar_.Add(this, chrome::NOTIFICATION_GOOGLE_URL_UPDATED,
324 content::NotificationService::AllSources()); 162 content::NotificationService::AllSources());
325 registrar_.Add(this, chrome::NOTIFICATION_USER_STYLE_SHEET_UPDATED,
326 content::NotificationService::AllSources());
327 #if defined(OS_POSIX) && !defined(OS_MACOSX)
328 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
329 content::Source<ThemeService>(
330 ThemeServiceFactory::GetForProfile(profile())));
331 #endif
332
333 // Register for notifications about all interested prefs change.
334 PrefService* prefs = profile()->GetPrefs();
335 pref_change_registrar_.Init(prefs);
336 if (prefs) {
337 for (int i = 0; i < kPrefsToObserveLength; ++i)
338 pref_change_registrar_.Add(kPrefsToObserve[i], this);
339
340 RegisterFontFamilyMapObserver(&pref_change_registrar_,
341 prefs::kWebKitStandardFontFamilyMap, this);
342 RegisterFontFamilyMapObserver(&pref_change_registrar_,
343 prefs::kWebKitFixedFontFamilyMap, this);
344 RegisterFontFamilyMapObserver(&pref_change_registrar_,
345 prefs::kWebKitSerifFontFamilyMap, this);
346 RegisterFontFamilyMapObserver(&pref_change_registrar_,
347 prefs::kWebKitSansSerifFontFamilyMap, this);
348 RegisterFontFamilyMapObserver(&pref_change_registrar_,
349 prefs::kWebKitCursiveFontFamilyMap, this);
350 RegisterFontFamilyMapObserver(&pref_change_registrar_,
351 prefs::kWebKitFantasyFontFamilyMap, this);
352 }
353
354 renderer_preferences_util::UpdateFromSystemSettings(
355 tab_contents()->GetMutableRendererPrefs(), profile());
356 } 163 }
357 164
358 TabContentsWrapper::~TabContentsWrapper() { 165 TabContentsWrapper::~TabContentsWrapper() {
359 in_destructor_ = true; 166 in_destructor_ = true;
360 167
361 // Need to tear down infobars before the TabContents goes away. 168 // Need to tear down infobars before the TabContents goes away.
362 infobar_tab_helper_.reset(); 169 infobar_tab_helper_.reset();
363 } 170 }
364 171
365 base::PropertyAccessor<TabContentsWrapper*>* 172 base::PropertyAccessor<TabContentsWrapper*>*
366 TabContentsWrapper::property_accessor() { 173 TabContentsWrapper::property_accessor() {
367 return g_tab_contents_wrapper_property_accessor.Pointer(); 174 return g_tab_contents_wrapper_property_accessor.Pointer();
368 } 175 }
369 176
370 // static
371 void TabContentsWrapper::RegisterUserPrefs(PrefService* prefs) { 177 void TabContentsWrapper::RegisterUserPrefs(PrefService* prefs) {
372 prefs->RegisterBooleanPref(prefs::kAlternateErrorPagesEnabled, 178 prefs->RegisterBooleanPref(prefs::kAlternateErrorPagesEnabled,
373 true, 179 true,
374 PrefService::SYNCABLE_PREF); 180 PrefService::SYNCABLE_PREF);
375
376 WebPreferences pref_defaults;
377 prefs->RegisterBooleanPref(prefs::kWebKitGlobalJavascriptEnabled,
378 pref_defaults.javascript_enabled,
379 PrefService::UNSYNCABLE_PREF);
380 prefs->RegisterBooleanPref(prefs::kWebKitWebSecurityEnabled,
381 pref_defaults.web_security_enabled,
382 PrefService::UNSYNCABLE_PREF);
383 prefs->RegisterBooleanPref(
384 prefs::kWebKitJavascriptCanOpenWindowsAutomatically,
385 true,
386 PrefService::UNSYNCABLE_PREF);
387 prefs->RegisterBooleanPref(prefs::kWebKitLoadsImagesAutomatically,
388 pref_defaults.loads_images_automatically,
389 PrefService::UNSYNCABLE_PREF);
390 prefs->RegisterBooleanPref(prefs::kWebKitPluginsEnabled,
391 pref_defaults.plugins_enabled,
392 PrefService::UNSYNCABLE_PREF);
393 prefs->RegisterBooleanPref(prefs::kWebKitDomPasteEnabled,
394 pref_defaults.dom_paste_enabled,
395 PrefService::UNSYNCABLE_PREF);
396 prefs->RegisterBooleanPref(prefs::kWebKitShrinksStandaloneImagesToFit,
397 pref_defaults.shrinks_standalone_images_to_fit,
398 PrefService::UNSYNCABLE_PREF);
399 prefs->RegisterDictionaryPref(prefs::kWebKitInspectorSettings,
400 PrefService::UNSYNCABLE_PREF);
401 prefs->RegisterBooleanPref(prefs::kWebKitTextAreasAreResizable,
402 pref_defaults.text_areas_are_resizable,
403 PrefService::UNSYNCABLE_PREF);
404 prefs->RegisterBooleanPref(prefs::kWebKitJavaEnabled,
405 pref_defaults.java_enabled,
406 PrefService::UNSYNCABLE_PREF);
407 prefs->RegisterBooleanPref(prefs::kWebkitTabsToLinks,
408 pref_defaults.tabs_to_links,
409 PrefService::UNSYNCABLE_PREF);
410 prefs->RegisterBooleanPref(prefs::kWebKitAllowRunningInsecureContent,
411 false,
412 PrefService::UNSYNCABLE_PREF);
413 prefs->RegisterBooleanPref(prefs::kWebKitAllowDisplayingInsecureContent,
414 true,
415 PrefService::UNSYNCABLE_PREF);
416
417 #if !defined(OS_MACOSX)
418 prefs->RegisterLocalizedStringPref(prefs::kAcceptLanguages,
419 IDS_ACCEPT_LANGUAGES,
420 PrefService::SYNCABLE_PREF);
421 #else
422 // Not used in OSX.
423 prefs->RegisterLocalizedStringPref(prefs::kAcceptLanguages,
424 IDS_ACCEPT_LANGUAGES,
425 PrefService::UNSYNCABLE_PREF);
426 #endif
427 prefs->RegisterLocalizedStringPref(prefs::kDefaultCharset,
428 IDS_DEFAULT_ENCODING,
429 PrefService::SYNCABLE_PREF);
430 prefs->RegisterLocalizedStringPref(prefs::kWebKitStandardFontFamily,
431 IDS_STANDARD_FONT_FAMILY,
432 PrefService::UNSYNCABLE_PREF);
433 prefs->RegisterLocalizedStringPref(prefs::kWebKitFixedFontFamily,
434 IDS_FIXED_FONT_FAMILY,
435 PrefService::UNSYNCABLE_PREF);
436 prefs->RegisterLocalizedStringPref(prefs::kWebKitSerifFontFamily,
437 IDS_SERIF_FONT_FAMILY,
438 PrefService::UNSYNCABLE_PREF);
439 prefs->RegisterLocalizedStringPref(prefs::kWebKitSansSerifFontFamily,
440 IDS_SANS_SERIF_FONT_FAMILY,
441 PrefService::UNSYNCABLE_PREF);
442 prefs->RegisterLocalizedStringPref(prefs::kWebKitCursiveFontFamily,
443 IDS_CURSIVE_FONT_FAMILY,
444 PrefService::UNSYNCABLE_PREF);
445 prefs->RegisterLocalizedStringPref(prefs::kWebKitFantasyFontFamily,
446 IDS_FANTASY_FONT_FAMILY,
447 PrefService::UNSYNCABLE_PREF);
448
449 // Register per-script font prefs that have defaults.
450 #if defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN)
451 // As explained by its definition, kPerScriptFontDefaultsLength is only
452 // defined for platforms where it would be non-zero.
453 std::string locale = g_browser_process->GetApplicationLocale();
454 for (size_t i = 0; i < kPerScriptFontDefaultsLength; ++i) {
455 const PerScriptFontDefault& pref = kPerScriptFontDefaults[i];
456 // Suppress default per-script font when the script matches the browser's
457 // locale. Otherwise, the default would override the user's preferences
458 // when viewing pages in their native language. This can be removed when
459 // per-script fonts are added to Preferences UI.
460 if (!StartsWithASCII(locale, pref.native_locale, false)) {
461 prefs->RegisterLocalizedStringPref(pref.pref_name,
462 pref.resource_id,
463 PrefService::UNSYNCABLE_PREF);
464 }
465 }
466 #endif
467
468 // Register the rest of the per-script font prefs.
469 RegisterFontFamilyMap(prefs, prefs::kWebKitStandardFontFamilyMap);
470 RegisterFontFamilyMap(prefs, prefs::kWebKitFixedFontFamilyMap);
471 RegisterFontFamilyMap(prefs, prefs::kWebKitSerifFontFamilyMap);
472 RegisterFontFamilyMap(prefs, prefs::kWebKitSansSerifFontFamilyMap);
473 RegisterFontFamilyMap(prefs, prefs::kWebKitCursiveFontFamilyMap);
474 RegisterFontFamilyMap(prefs, prefs::kWebKitFantasyFontFamilyMap);
475
476 prefs->RegisterLocalizedIntegerPref(prefs::kWebKitDefaultFontSize,
477 IDS_DEFAULT_FONT_SIZE,
478 PrefService::UNSYNCABLE_PREF);
479 prefs->RegisterLocalizedIntegerPref(prefs::kWebKitDefaultFixedFontSize,
480 IDS_DEFAULT_FIXED_FONT_SIZE,
481 PrefService::UNSYNCABLE_PREF);
482 prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumFontSize,
483 IDS_MINIMUM_FONT_SIZE,
484 PrefService::UNSYNCABLE_PREF);
485 prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumLogicalFontSize,
486 IDS_MINIMUM_LOGICAL_FONT_SIZE,
487 PrefService::UNSYNCABLE_PREF);
488 prefs->RegisterLocalizedBooleanPref(prefs::kWebKitUsesUniversalDetector,
489 IDS_USES_UNIVERSAL_DETECTOR,
490 PrefService::SYNCABLE_PREF);
491 prefs->RegisterLocalizedStringPref(prefs::kStaticEncodings,
492 IDS_STATIC_ENCODING_LIST,
493 PrefService::UNSYNCABLE_PREF);
494 prefs->RegisterStringPref(prefs::kRecentlySelectedEncoding,
495 "",
496 PrefService::UNSYNCABLE_PREF);
497 } 181 }
498 182
499 string16 TabContentsWrapper::GetDefaultTitle() { 183 string16 TabContentsWrapper::GetDefaultTitle() {
500 return l10n_util::GetStringUTF16(IDS_DEFAULT_TAB_TITLE); 184 return l10n_util::GetStringUTF16(IDS_DEFAULT_TAB_TITLE);
501 } 185 }
502 186
503 string16 TabContentsWrapper::GetStatusText() const { 187 string16 TabContentsWrapper::GetStatusText() const {
504 if (!tab_contents()->IsLoading() || 188 if (!tab_contents()->IsLoading() ||
505 tab_contents()->load_state().state == net::LOAD_STATE_IDLE) { 189 tab_contents()->load_state().state == net::LOAD_STATE_IDLE) {
506 return string16(); 190 return string16();
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 DCHECK(in_destructor_); 297 DCHECK(in_destructor_);
614 } 298 }
615 299
616 void TabContentsWrapper::Observe(int type, 300 void TabContentsWrapper::Observe(int type,
617 const content::NotificationSource& source, 301 const content::NotificationSource& source,
618 const content::NotificationDetails& details) { 302 const content::NotificationDetails& details) {
619 switch (type) { 303 switch (type) {
620 case chrome::NOTIFICATION_GOOGLE_URL_UPDATED: 304 case chrome::NOTIFICATION_GOOGLE_URL_UPDATED:
621 UpdateAlternateErrorPageURL(render_view_host()); 305 UpdateAlternateErrorPageURL(render_view_host());
622 break; 306 break;
623 case chrome::NOTIFICATION_USER_STYLE_SHEET_UPDATED:
624 UpdateWebPreferences();
625 break;
626 #if defined(OS_POSIX) && !defined(OS_MACOSX)
627 case chrome::NOTIFICATION_BROWSER_THEME_CHANGED: {
628 UpdateRendererPreferences();
629 break;
630 }
631 #endif
632 case chrome::NOTIFICATION_PREF_CHANGED: { 307 case chrome::NOTIFICATION_PREF_CHANGED: {
633 std::string* pref_name_in = content::Details<std::string>(details).ptr(); 308 std::string* pref_name_in = content::Details<std::string>(details).ptr();
634 DCHECK(content::Source<PrefService>(source).ptr() == 309 DCHECK(content::Source<PrefService>(source).ptr() ==
635 profile()->GetPrefs() || 310 profile()->GetPrefs());
636 content::Source<PrefService>(source).ptr() ==
637 per_tab_prefs_tab_helper_->prefs());
638 if (*pref_name_in == prefs::kAlternateErrorPagesEnabled) { 311 if (*pref_name_in == prefs::kAlternateErrorPagesEnabled) {
639 UpdateAlternateErrorPageURL(render_view_host()); 312 UpdateAlternateErrorPageURL(render_view_host());
640 } else if ((*pref_name_in == prefs::kDefaultCharset) ||
641 StartsWithASCII(*pref_name_in, "webkit.webprefs.", true)) {
642 UpdateWebPreferences();
643 } else if (*pref_name_in == prefs::kDefaultZoomLevel) { 313 } else if (*pref_name_in == prefs::kDefaultZoomLevel) {
644 tab_contents()->render_view_host()->SetZoomLevel( 314 tab_contents()->render_view_host()->SetZoomLevel(
645 tab_contents()->GetZoomLevel()); 315 tab_contents()->GetZoomLevel());
646 } else if (*pref_name_in == prefs::kEnableReferrers) {
647 UpdateRendererPreferences();
648 } else if (*pref_name_in == prefs::kSafeBrowsingEnabled) { 316 } else if (*pref_name_in == prefs::kSafeBrowsingEnabled) {
649 UpdateSafebrowsingDetectionHost(); 317 UpdateSafebrowsingDetectionHost();
650 } else { 318 } else {
651 NOTREACHED() << "unexpected pref change notification" << *pref_name_in; 319 NOTREACHED() << "unexpected pref change notification" << *pref_name_in;
652 } 320 }
653 break; 321 break;
654 } 322 }
655 default: 323 default:
656 NOTREACHED(); 324 NOTREACHED();
657 } 325 }
(...skipping 25 matching lines...) Expand all
683 GURL(google_util::kLinkDoctorBaseURL)); 351 GURL(google_util::kLinkDoctorBaseURL));
684 url = google_util::AppendGoogleTLDParam(url); 352 url = google_util::AppendGoogleTLDParam(url);
685 } 353 }
686 return url; 354 return url;
687 } 355 }
688 356
689 void TabContentsWrapper::UpdateAlternateErrorPageURL(RenderViewHost* rvh) { 357 void TabContentsWrapper::UpdateAlternateErrorPageURL(RenderViewHost* rvh) {
690 rvh->SetAltErrorPageURL(GetAlternateErrorPageURL()); 358 rvh->SetAltErrorPageURL(GetAlternateErrorPageURL());
691 } 359 }
692 360
693 void TabContentsWrapper::UpdateWebPreferences() {
694 RenderViewHostDelegate* rvhd = tab_contents();
695 WebPreferences prefs = rvhd->GetWebkitPrefs();
696 per_tab_prefs_tab_helper_->OverrideWebPreferences(&prefs);
697 tab_contents()->render_view_host()->UpdateWebkitPreferences(prefs);
698 }
699
700 void TabContentsWrapper::UpdateRendererPreferences() {
701 renderer_preferences_util::UpdateFromSystemSettings(
702 tab_contents()->GetMutableRendererPrefs(), profile());
703 render_view_host()->SyncRendererPrefs();
704 }
705
706 void TabContentsWrapper::UpdateSafebrowsingDetectionHost() { 361 void TabContentsWrapper::UpdateSafebrowsingDetectionHost() {
707 #if defined(ENABLE_SAFE_BROWSING) 362 #if defined(ENABLE_SAFE_BROWSING)
708 PrefService* prefs = profile()->GetPrefs(); 363 PrefService* prefs = profile()->GetPrefs();
709 bool safe_browsing = prefs->GetBoolean(prefs::kSafeBrowsingEnabled); 364 bool safe_browsing = prefs->GetBoolean(prefs::kSafeBrowsingEnabled);
710 if (safe_browsing && 365 if (safe_browsing &&
711 g_browser_process->safe_browsing_detection_service()) { 366 g_browser_process->safe_browsing_detection_service()) {
712 if (!safebrowsing_detection_host_.get()) { 367 if (!safebrowsing_detection_host_.get()) {
713 safebrowsing_detection_host_.reset( 368 safebrowsing_detection_host_.reset(
714 safe_browsing::ClientSideDetectionHost::Create(tab_contents())); 369 safe_browsing::ClientSideDetectionHost::Create(tab_contents()));
715 } 370 }
716 } else { 371 } else {
717 safebrowsing_detection_host_.reset(); 372 safebrowsing_detection_host_.reset();
718 } 373 }
719 render_view_host()->Send( 374 render_view_host()->Send(
720 new ChromeViewMsg_SetClientSidePhishingDetection(routing_id(), 375 new ChromeViewMsg_SetClientSidePhishingDetection(routing_id(),
721 safe_browsing)); 376 safe_browsing));
722 #endif 377 #endif
723 } 378 }
724 379
725 void TabContentsWrapper::ExitFullscreenMode() { 380 void TabContentsWrapper::ExitFullscreenMode() {
726 if (tab_contents() && render_view_host()) 381 if (tab_contents() && render_view_host())
727 tab_contents()->render_view_host()->ExitFullscreen(); 382 tab_contents()->render_view_host()->ExitFullscreen();
728 } 383 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/tab_contents/tab_contents_wrapper.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698