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

Side by Side Diff: chrome/browser/ui/content_settings/content_setting_bubble_model.cc

Issue 319553008: Updated Plugin bubble model to add "learn more" link and to appear with a sliding yellow thing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed comments Created 6 years, 6 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/ui/content_settings/content_setting_bubble_model.h" 5 #include "chrome/browser/ui/content_settings/content_setting_bubble_model.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/prefs/pref_service.h" 8 #include "base/prefs/pref_service.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/chrome_notification_types.h" 10 #include "chrome/browser/chrome_notification_types.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 Delegate* delegate, 88 Delegate* delegate,
89 WebContents* web_contents, 89 WebContents* web_contents,
90 Profile* profile, 90 Profile* profile,
91 ContentSettingsType content_type) 91 ContentSettingsType content_type)
92 : ContentSettingBubbleModel(web_contents, profile, content_type), 92 : ContentSettingBubbleModel(web_contents, profile, content_type),
93 delegate_(delegate) { 93 delegate_(delegate) {
94 // Notifications do not have a bubble. 94 // Notifications do not have a bubble.
95 DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 95 DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
96 SetTitle(); 96 SetTitle();
97 SetManageLink(); 97 SetManageLink();
98 SetLearnMoreLink();
98 } 99 }
99 100
100 void ContentSettingTitleAndLinkModel::SetTitle() { 101 void ContentSettingTitleAndLinkModel::SetTitle() {
101 static const ContentSettingsTypeIdEntry kBlockedTitleIDs[] = { 102 static const ContentSettingsTypeIdEntry kBlockedTitleIDs[] = {
102 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_TITLE}, 103 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_TITLE},
103 {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_TITLE}, 104 {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_TITLE},
104 {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_TITLE}, 105 {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_TITLE},
105 {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_MESSAGE}, 106 {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_MESSAGE},
106 {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_TITLE}, 107 {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_TITLE},
107 {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, 108 {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 }; 150 };
150 set_manage_link(l10n_util::GetStringUTF8( 151 set_manage_link(l10n_util::GetStringUTF8(
151 GetIdForContentType(kLinkIDs, arraysize(kLinkIDs), content_type()))); 152 GetIdForContentType(kLinkIDs, arraysize(kLinkIDs), content_type())));
152 } 153 }
153 154
154 void ContentSettingTitleAndLinkModel::OnManageLinkClicked() { 155 void ContentSettingTitleAndLinkModel::OnManageLinkClicked() {
155 if (delegate_) 156 if (delegate_)
156 delegate_->ShowContentSettingsPage(content_type()); 157 delegate_->ShowContentSettingsPage(content_type());
157 } 158 }
158 159
160 void ContentSettingTitleAndLinkModel::SetLearnMoreLink() {
161 static const ContentSettingsTypeIdEntry kLearnMoreIDs[] = {
162 {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_LEARN_MORE},
163 };
164 int learn_more_id =
165 GetIdForContentType(kLearnMoreIDs, arraysize(kLearnMoreIDs),
166 content_type());
167 if (learn_more_id)
168 set_learn_more_link(l10n_util::GetStringUTF8(learn_more_id));
169 }
170
171 void ContentSettingTitleAndLinkModel::OnLearnMoreLinkClicked() {
172 if (delegate_)
173 delegate_->ShowLearnMorePage(content_type());
174 }
175
159 class ContentSettingTitleLinkAndCustomModel 176 class ContentSettingTitleLinkAndCustomModel
160 : public ContentSettingTitleAndLinkModel { 177 : public ContentSettingTitleAndLinkModel {
161 public: 178 public:
162 ContentSettingTitleLinkAndCustomModel(Delegate* delegate, 179 ContentSettingTitleLinkAndCustomModel(Delegate* delegate,
163 WebContents* web_contents, 180 WebContents* web_contents,
164 Profile* profile, 181 Profile* profile,
165 ContentSettingsType content_type); 182 ContentSettingsType content_type);
166 virtual ~ContentSettingTitleLinkAndCustomModel() {} 183 virtual ~ContentSettingTitleLinkAndCustomModel() {}
167 184
168 private: 185 private:
169 void SetCustomLink(); 186 void SetCustomLink();
170 virtual void OnCustomLinkClicked() OVERRIDE {} 187 virtual void OnCustomLinkClicked() OVERRIDE {}
171 }; 188 };
172 189
173 ContentSettingTitleLinkAndCustomModel::ContentSettingTitleLinkAndCustomModel( 190 ContentSettingTitleLinkAndCustomModel::ContentSettingTitleLinkAndCustomModel(
174 Delegate* delegate, 191 Delegate* delegate,
175 WebContents* web_contents, 192 WebContents* web_contents,
176 Profile* profile, 193 Profile* profile,
177 ContentSettingsType content_type) 194 ContentSettingsType content_type)
178 : ContentSettingTitleAndLinkModel( 195 : ContentSettingTitleAndLinkModel(
179 delegate, web_contents, profile, content_type) { 196 delegate, web_contents, profile, content_type) {
180 SetCustomLink(); 197 SetCustomLink();
181 } 198 }
182 199
183 void ContentSettingTitleLinkAndCustomModel::SetCustomLink() { 200 void ContentSettingTitleLinkAndCustomModel::SetCustomLink() {
184 static const ContentSettingsTypeIdEntry kCustomIDs[] = { 201 static const ContentSettingsTypeIdEntry kCustomIDs[] = {
185 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_INFO}, 202 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_INFO},
186 {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_LOAD_ALL},
187 {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, IDS_ALLOW_INSECURE_CONTENT_BUTTON}, 203 {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, IDS_ALLOW_INSECURE_CONTENT_BUTTON},
188 }; 204 };
189 int custom_link_id = 205 int custom_link_id =
190 GetIdForContentType(kCustomIDs, arraysize(kCustomIDs), content_type()); 206 GetIdForContentType(kCustomIDs, arraysize(kCustomIDs), content_type());
191 if (custom_link_id) 207 if (custom_link_id)
192 set_custom_link(l10n_util::GetStringUTF8(custom_link_id)); 208 set_custom_link(l10n_util::GetStringUTF8(custom_link_id));
193 } 209 }
194 210
195 class ContentSettingSingleRadioGroup 211 class ContentSettingSingleRadioGroup
196 : public ContentSettingTitleLinkAndCustomModel { 212 : public ContentSettingTitleLinkAndCustomModel {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 DCHECK(!allowed || 276 DCHECK(!allowed ||
261 content_settings->IsContentAllowed(content_type())); 277 content_settings->IsContentAllowed(content_type()));
262 278
263 RadioGroup radio_group; 279 RadioGroup radio_group;
264 radio_group.url = url; 280 radio_group.url = url;
265 281
266 static const ContentSettingsTypeIdEntry kBlockedAllowIDs[] = { 282 static const ContentSettingsTypeIdEntry kBlockedAllowIDs[] = {
267 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_UNBLOCK}, 283 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_UNBLOCK},
268 {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_UNBLOCK}, 284 {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_UNBLOCK},
269 {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_UNBLOCK}, 285 {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_UNBLOCK},
270 {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_UNBLOCK_ALL},
271 {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_UNBLOCK}, 286 {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_UNBLOCK},
272 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_UNBLOCK}, 287 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_UNBLOCK},
273 {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_UNBLOCK}, 288 {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_UNBLOCK},
274 }; 289 };
275 // Fields as for kBlockedAllowIDs, above. 290 // Fields as for kBlockedAllowIDs, above.
276 static const ContentSettingsTypeIdEntry kAllowedAllowIDs[] = { 291 static const ContentSettingsTypeIdEntry kAllowedAllowIDs[] = {
277 // TODO(bauerb): The string shouldn't be "unblock" (they weren't blocked). 292 // TODO(bauerb): The string shouldn't be "unblock" (they weren't blocked).
278 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_UNBLOCK}, 293 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_UNBLOCK},
279 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_NO_ACTION}, 294 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_NO_ACTION},
280 {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_NO_ACTION}, 295 {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_NO_ACTION},
(...skipping 11 matching lines...) Expand all
292 radio_allow_label = l10n_util::GetStringFUTF8( 307 radio_allow_label = l10n_util::GetStringFUTF8(
293 GetIdForContentType(kBlockedAllowIDs, arraysize(kBlockedAllowIDs), 308 GetIdForContentType(kBlockedAllowIDs, arraysize(kBlockedAllowIDs),
294 content_type()), 309 content_type()),
295 display_host); 310 display_host);
296 } 311 }
297 312
298 static const ContentSettingsTypeIdEntry kBlockedBlockIDs[] = { 313 static const ContentSettingsTypeIdEntry kBlockedBlockIDs[] = {
299 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_NO_ACTION}, 314 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_NO_ACTION},
300 {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_NO_ACTION}, 315 {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_NO_ACTION},
301 {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_NO_ACTION}, 316 {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_NO_ACTION},
302 {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_NO_ACTION},
303 {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_NO_ACTION}, 317 {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_NO_ACTION},
304 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_NO_ACTION}, 318 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_NO_ACTION},
305 {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_NO_ACTION}, 319 {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_NO_ACTION},
306 }; 320 };
307 static const ContentSettingsTypeIdEntry kAllowedBlockIDs[] = { 321 static const ContentSettingsTypeIdEntry kAllowedBlockIDs[] = {
308 // TODO(bauerb): The string should say "block". 322 // TODO(bauerb): The string should say "block".
309 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_NO_ACTION}, 323 {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_NO_ACTION},
310 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_BLOCK}, 324 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_BLOCK},
311 {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_BLOCK}, 325 {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_BLOCK},
312 }; 326 };
313 327
314 std::string radio_block_label; 328 std::string radio_block_label;
315 if (allowed) { 329 if (allowed) {
316 int resource_id = GetIdForContentType(kAllowedBlockIDs, 330 int resource_id = GetIdForContentType(kAllowedBlockIDs,
317 arraysize(kAllowedBlockIDs), 331 arraysize(kAllowedBlockIDs),
318 content_type()); 332 content_type());
319 radio_block_label = (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) ? 333 radio_block_label = (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) ?
320 l10n_util::GetStringUTF8(resource_id) : 334 l10n_util::GetStringUTF8(resource_id) :
321 l10n_util::GetStringFUTF8(resource_id, display_host); 335 l10n_util::GetStringFUTF8(resource_id, display_host);
322 } else { 336 } else {
323 radio_block_label = l10n_util::GetStringUTF8( 337 radio_block_label = l10n_util::GetStringUTF8(
324 GetIdForContentType(kBlockedBlockIDs, arraysize(kBlockedBlockIDs), 338 GetIdForContentType(kBlockedBlockIDs, arraysize(kBlockedBlockIDs),
325 content_type())); 339 content_type()));
326 } 340 }
327 341
328 radio_group.radio_items.push_back(radio_allow_label); 342 radio_group.radio_items.push_back(radio_allow_label);
329 radio_group.radio_items.push_back(radio_block_label); 343 radio_group.radio_items.push_back(radio_block_label);
330 ContentSetting setting; 344 ContentSetting setting;
331 SettingSource setting_source = SETTING_SOURCE_NONE; 345 SettingSource setting_source = SETTING_SOURCE_NONE;
332 bool setting_is_wildcard = false;
333 346
334 if (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) { 347 if (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) {
335 CookieSettings* cookie_settings = 348 CookieSettings* cookie_settings =
336 CookieSettings::Factory::GetForProfile(profile()).get(); 349 CookieSettings::Factory::GetForProfile(profile()).get();
337 setting = cookie_settings->GetCookieSetting( 350 setting = cookie_settings->GetCookieSetting(
338 url, url, true, &setting_source); 351 url, url, true, &setting_source);
339 } else { 352 } else {
340 SettingInfo info; 353 SettingInfo info;
341 HostContentSettingsMap* map = profile()->GetHostContentSettingsMap(); 354 HostContentSettingsMap* map = profile()->GetHostContentSettingsMap();
342 scoped_ptr<base::Value> value(map->GetWebsiteSetting( 355 scoped_ptr<base::Value> value(map->GetWebsiteSetting(
343 url, url, content_type(), std::string(), &info)); 356 url, url, content_type(), std::string(), &info));
344 setting = content_settings::ValueToContentSetting(value.get()); 357 setting = content_settings::ValueToContentSetting(value.get());
345 setting_source = info.source; 358 setting_source = info.source;
346 setting_is_wildcard =
347 info.primary_pattern == ContentSettingsPattern::Wildcard() &&
348 info.secondary_pattern == ContentSettingsPattern::Wildcard();
349 } 359 }
350 360
351 if (content_type() == CONTENT_SETTINGS_TYPE_PLUGINS && 361 if (setting == CONTENT_SETTING_ALLOW) {
352 setting == CONTENT_SETTING_ALLOW &&
353 setting_is_wildcard) {
354 // In the corner case of unrecognized plugins (which are now blocked by
355 // default) we indicate the blocked state in the UI and allow the user to
356 // whitelist.
357 radio_group.default_item = 1;
358 } else if (setting == CONTENT_SETTING_ALLOW) {
359 radio_group.default_item = kAllowButtonIndex; 362 radio_group.default_item = kAllowButtonIndex;
360 // |block_setting_| is already set to |CONTENT_SETTING_BLOCK|. 363 // |block_setting_| is already set to |CONTENT_SETTING_BLOCK|.
361 } else { 364 } else {
362 radio_group.default_item = 1; 365 radio_group.default_item = 1;
363 block_setting_ = setting; 366 block_setting_ = setting;
Bernhard Bauer 2014/06/16 09:43:16 This isn't necessary anymore if this is not going
radhikabhar 2014/06/16 18:21:38 Removed it.
364 } 367 }
365 368
366 set_setting_is_managed(setting_source != SETTING_SOURCE_USER); 369 set_setting_is_managed(setting_source != SETTING_SOURCE_USER);
367 if (setting_source != SETTING_SOURCE_USER) { 370 if (setting_source != SETTING_SOURCE_USER) {
368 set_radio_group_enabled(false); 371 set_radio_group_enabled(false);
369 } else { 372 } else {
370 set_radio_group_enabled(true); 373 set_radio_group_enabled(true);
371 } 374 }
372 selected_item_ = radio_group.default_item; 375 selected_item_ = radio_group.default_item;
373 set_radio_group(radio_group); 376 set_radio_group(radio_group);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 if (!web_contents()) 427 if (!web_contents())
425 return; 428 return;
426 content::NotificationService::current()->Notify( 429 content::NotificationService::current()->Notify(
427 chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN, 430 chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN,
428 content::Source<TabSpecificContentSettings>( 431 content::Source<TabSpecificContentSettings>(
429 TabSpecificContentSettings::FromWebContents(web_contents())), 432 TabSpecificContentSettings::FromWebContents(web_contents())),
430 content::NotificationService::NoDetails()); 433 content::NotificationService::NoDetails());
431 delegate()->ShowCollectedCookiesDialog(web_contents()); 434 delegate()->ShowCollectedCookiesDialog(web_contents());
432 } 435 }
433 436
434 class ContentSettingPluginBubbleModel : public ContentSettingSingleRadioGroup { 437 class ContentSettingPluginBubbleModel : public ContentSettingTitleAndLinkModel {
435 public: 438 public:
436 ContentSettingPluginBubbleModel(Delegate* delegate, 439 ContentSettingPluginBubbleModel(Delegate* delegate,
437 WebContents* web_contents, 440 WebContents* web_contents,
438 Profile* profile, 441 Profile* profile,
439 ContentSettingsType content_type); 442 ContentSettingsType content_type);
440 443
441 virtual ~ContentSettingPluginBubbleModel(); 444 virtual ~ContentSettingPluginBubbleModel();
442 445
443 private: 446 private:
444 virtual void OnCustomLinkClicked() OVERRIDE; 447 void SetRadioGroup();
448
449 // Cookie bubble implementation.
450 virtual void OnRadioClicked(int radio_index) OVERRIDE;
451
452 // Function to load plugins.
453 void OnRunPlugins();
454
455 bool settings_changed() const;
456 int selected_item() const { return selected_item_; }
457
458 ContentSetting block_setting_;
459 int selected_item_;
460 int kAllowOnceButtonIndex;
Bernhard Bauer 2014/06/16 09:43:15 Why is this a member variable?
radhikabhar 2014/06/16 18:21:37 Removed it and made it as a global.
445 }; 461 };
446 462
447 ContentSettingPluginBubbleModel::ContentSettingPluginBubbleModel( 463 ContentSettingPluginBubbleModel::ContentSettingPluginBubbleModel(
448 Delegate* delegate, 464 Delegate* delegate,
449 WebContents* web_contents, 465 WebContents* web_contents,
450 Profile* profile, 466 Profile* profile,
451 ContentSettingsType content_type) 467 ContentSettingsType content_type)
452 : ContentSettingSingleRadioGroup( 468 : ContentSettingTitleAndLinkModel(
453 delegate, web_contents, profile, content_type) { 469 delegate, web_contents, profile, content_type),
470 block_setting_(CONTENT_SETTING_BLOCK),
471 selected_item_(0),
472 kAllowOnceButtonIndex(1) {
454 DCHECK_EQ(content_type, CONTENT_SETTINGS_TYPE_PLUGINS); 473 DCHECK_EQ(content_type, CONTENT_SETTINGS_TYPE_PLUGINS);
455 // Disable the "Run all plugins this time" link if the setting is managed and 474 SetRadioGroup();
456 // can't be controlled by the user or if the user already clicked on the link
457 // and ran all plugins.
458 set_custom_link_enabled(!setting_is_managed() &&
459 web_contents &&
460 TabSpecificContentSettings::FromWebContents(
461 web_contents)->load_plugins_link_enabled());
462 } 475 }
463 476
464 ContentSettingPluginBubbleModel::~ContentSettingPluginBubbleModel() { 477 ContentSettingPluginBubbleModel::~ContentSettingPluginBubbleModel() {
465 if (settings_changed()) { 478 if (!settings_changed())
479 return;
480 ContentSetting setting;
481 if (selected_item_ == kAllowButtonIndex) {
482 setting = CONTENT_SETTING_ALLOW;
466 // If the user elected to allow all plugins then run plugins at this time. 483 // If the user elected to allow all plugins then run plugins at this time.
467 if (selected_item() == kAllowButtonIndex) 484 OnRunPlugins();
468 OnCustomLinkClicked(); 485 } else if (selected_item_ == kAllowOnceButtonIndex) {
486 setting = CONTENT_SETTING_DEFAULT;
Bernhard Bauer 2014/06/16 09:43:16 Wait, this means that we will run all plugins curr
radhikabhar 2014/06/16 18:21:37 I added this for the corner case when the user sel
487 OnRunPlugins();
488 } else {
Bernhard Bauer 2014/06/16 09:43:16 Can you DCHECK that the selected item is the block
radhikabhar 2014/06/16 18:21:37 Done.
489 setting = block_setting_;
490 }
491 TabSpecificContentSettings::FromWebContents(web_contents())->
492 set_plugin_bubble_setting(setting);
493 if (profile()) {
Bernhard Bauer 2014/06/16 09:43:15 When is profile() NULL?
radhikabhar 2014/06/16 18:21:37 Removed it.
494 profile()->GetHostContentSettingsMap()->AddExceptionForURL(
495 bubble_content().radio_group.url,
Bernhard Bauer 2014/06/16 09:43:15 Also, this will add an exception for a plugin with
radhikabhar 2014/06/16 18:21:37 So previously the destructor was adding an excepti
496 bubble_content().radio_group.url,
497 content_type(),
498 setting);
469 } 499 }
470 } 500 }
471 501
472 void ContentSettingPluginBubbleModel::OnCustomLinkClicked() { 502 bool ContentSettingPluginBubbleModel::settings_changed() const {
Bernhard Bauer 2014/06/16 09:43:15 This isn't really a trivial accessor method, so it
radhikabhar 2014/06/16 18:21:38 Done.
503 return selected_item_ != bubble_content().radio_group.default_item;
504 }
505
506 void ContentSettingPluginBubbleModel::OnRadioClicked(int radio_index) {
507 selected_item_ = radio_index;
508 }
509
510 void ContentSettingPluginBubbleModel::SetRadioGroup() {
511 GURL url = web_contents()->GetURL();
512 TabSpecificContentSettings* content_settings =
513 TabSpecificContentSettings::FromWebContents(web_contents());
514 bool allowed =
Bernhard Bauer 2014/06/16 09:43:15 I think this is only necessary for cookies.
radhikabhar 2014/06/16 18:21:37 Done.
515 !content_settings->IsContentBlocked(content_type());
516 DCHECK(!allowed ||
517 content_settings->IsContentAllowed(content_type()));
518 RadioGroup radio_group;
519 radio_group.url = url;
520
521 std::string radio_allow_label =
522 l10n_util::GetStringUTF8(IDS_BLOCKED_PLUGINS_UNBLOCK_ALL);
523 std::string radio_allow_once_label =
524 l10n_util::GetStringUTF8(IDS_BLOCKED_PLUGINS_LOAD_ALL);
525 std::string radio_block_label =
526 l10n_util::GetStringUTF8(IDS_BLOCKED_PLUGINS_NO_ACTION);
527
528 radio_group.radio_items.push_back(radio_allow_label);
529 radio_group.radio_items.push_back(radio_allow_once_label);
530 radio_group.radio_items.push_back(radio_block_label);
531
532 ContentSetting setting;
533 SettingSource setting_source = SETTING_SOURCE_NONE;
534 bool setting_is_wildcard = false;
535 SettingInfo info;
536 HostContentSettingsMap* map = profile()->GetHostContentSettingsMap();
537 scoped_ptr<base::Value> value(map->GetWebsiteSetting(
538 url, url, content_type(), std::string(), &info));
539 setting = content_settings->plugin_bubble_setting();
540 setting_source = info.source;
541 setting_is_wildcard =
542 info.primary_pattern == ContentSettingsPattern::Wildcard() &&
543 info.secondary_pattern == ContentSettingsPattern::Wildcard();
544
545 if (setting == CONTENT_SETTING_ALLOW && setting_is_wildcard) {
Bernhard Bauer 2014/06/16 09:43:16 Really, you could fold this case into the next one
radhikabhar 2014/06/16 18:21:37 Since I changed the way I remember the user select
546 // In the corner case of unrecognized plugins (which are now blocked by
547 // default) we indicate the blocked state in the UI and allow the user to
548 // whitelist.
Bernhard Bauer 2014/06/16 09:43:16 Are we actually still handling this case? We get |
radhikabhar 2014/06/16 18:21:37 Removed it
549 radio_group.default_item = 2;
Bernhard Bauer 2014/06/16 09:43:16 Can this 2 also get a constant?
radhikabhar 2014/06/16 18:21:37 Done.
550 } else if (setting == CONTENT_SETTING_ALLOW) {
551 radio_group.default_item = kAllowButtonIndex;
552 } else if (setting == CONTENT_SETTING_DEFAULT) {
553 radio_group.default_item = kAllowOnceButtonIndex;
554 // |block_setting_| is already set to |CONTENT_SETTING_BLOCK|.
555 } else {
556 radio_group.default_item = 2;
Bernhard Bauer 2014/06/16 09:43:16 DCHECK that the setting is BLOCK?
radhikabhar 2014/06/16 18:21:37 Done.
557 block_setting_ = setting;
558 }
559
560 set_setting_is_managed(setting_source != SETTING_SOURCE_USER);
561 if (setting_source != SETTING_SOURCE_USER) {
562 set_radio_group_enabled(false);
Bernhard Bauer 2014/06/16 09:43:15 Extract `setting_source != SETTING_SOURCE_USER` in
radhikabhar 2014/06/16 18:21:38 Done.
563 } else {
564 set_radio_group_enabled(true);
565 }
566 selected_item_ = radio_group.default_item;
567 set_radio_group(radio_group);
568 }
569
570 void ContentSettingPluginBubbleModel::OnRunPlugins() {
473 content::RecordAction(UserMetricsAction("ClickToPlay_LoadAll_Bubble")); 571 content::RecordAction(UserMetricsAction("ClickToPlay_LoadAll_Bubble"));
474 DCHECK(web_contents()); 572 DCHECK(web_contents());
475 #if defined(ENABLE_PLUGINS) 573 #if defined(ENABLE_PLUGINS)
476 // TODO(bauerb): We should send the identifiers of blocked plug-ins here. 574 // TODO(bauerb): We should send the identifiers of blocked plug-ins here.
477 ChromePluginServiceFilter::GetInstance()->AuthorizeAllPlugins( 575 ChromePluginServiceFilter::GetInstance()->AuthorizeAllPlugins(
478 web_contents(), true, std::string()); 576 web_contents(), true, std::string());
479 #endif 577 #endif
480 set_custom_link_enabled(false);
481 TabSpecificContentSettings::FromWebContents(web_contents())->
482 set_load_plugins_link_enabled(false);
483 } 578 }
484 579
485 class ContentSettingPopupBubbleModel : public ContentSettingSingleRadioGroup { 580 class ContentSettingPopupBubbleModel : public ContentSettingSingleRadioGroup {
486 public: 581 public:
487 ContentSettingPopupBubbleModel(Delegate* delegate, 582 ContentSettingPopupBubbleModel(Delegate* delegate,
488 WebContents* web_contents, 583 WebContents* web_contents,
489 Profile* profile, 584 Profile* profile,
490 ContentSettingsType content_type); 585 ContentSettingsType content_type);
491 virtual ~ContentSettingPopupBubbleModel() {} 586 virtual ~ContentSettingPopupBubbleModel() {}
492 587
(...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after
1306 if (type == content::NOTIFICATION_WEB_CONTENTS_DESTROYED) { 1401 if (type == content::NOTIFICATION_WEB_CONTENTS_DESTROYED) {
1307 DCHECK_EQ(web_contents_, 1402 DCHECK_EQ(web_contents_,
1308 content::Source<WebContents>(source).ptr()); 1403 content::Source<WebContents>(source).ptr());
1309 web_contents_ = NULL; 1404 web_contents_ = NULL;
1310 } else { 1405 } else {
1311 DCHECK_EQ(chrome::NOTIFICATION_PROFILE_DESTROYED, type); 1406 DCHECK_EQ(chrome::NOTIFICATION_PROFILE_DESTROYED, type);
1312 DCHECK_EQ(profile_, content::Source<Profile>(source).ptr()); 1407 DCHECK_EQ(profile_, content::Source<Profile>(source).ptr());
1313 profile_ = NULL; 1408 profile_ = NULL;
1314 } 1409 }
1315 } 1410 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698