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

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

Issue 2561673003: Handle per-tab AUTOMATIC_DOWNLOADS setting in DownloadRequestLimiter. (Closed)
Patch Set: Get HostContentSettingsMap directly in DRL tests Created 3 years, 9 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_image_model.h" 5 #include "chrome/browser/ui/content_settings/content_setting_image_model.h"
6 6
7 #include "base/feature_list.h" 7 #include "base/feature_list.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
11 #include "chrome/app/vector_icons/vector_icons.h" 11 #include "chrome/app/vector_icons/vector_icons.h"
12 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" 13 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
13 #include "chrome/browser/content_settings/tab_specific_content_settings.h" 14 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
15 #include "chrome/browser/download/download_request_limiter.h"
14 #include "chrome/browser/plugins/plugin_utils.h" 16 #include "chrome/browser/plugins/plugin_utils.h"
15 #include "chrome/browser/prerender/prerender_manager.h" 17 #include "chrome/browser/prerender/prerender_manager.h"
16 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/common/chrome_features.h" 19 #include "chrome/common/chrome_features.h"
18 #include "chrome/grit/generated_resources.h" 20 #include "chrome/grit/generated_resources.h"
19 #include "components/content_settings/core/browser/host_content_settings_map.h" 21 #include "components/content_settings/core/browser/host_content_settings_map.h"
20 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
21 #include "ui/base/l10n/l10n_util.h" 23 #include "ui/base/l10n/l10n_util.h"
22 #include "ui/base/material_design/material_design_controller.h" 24 #include "ui/base/material_design/material_design_controller.h"
23 #include "ui/gfx/color_palette.h" 25 #include "ui/gfx/color_palette.h"
24 #include "ui/gfx/color_utils.h" 26 #include "ui/gfx/color_utils.h"
25 #include "ui/gfx/paint_vector_icon.h" 27 #include "ui/gfx/paint_vector_icon.h"
26 #include "ui/vector_icons/vector_icons.h" 28 #include "ui/vector_icons/vector_icons.h"
27 29
28 using content::WebContents; 30 using content::WebContents;
29 31
30 // The image models hierarchy: 32 // The image models hierarchy:
31 // 33 //
32 // ContentSettingImageModel - base class 34 // ContentSettingImageModel - base class
33 // ContentSettingSimpleImageModel - single content setting 35 // ContentSettingSimpleImageModel - single content setting
34 // ContentSettingBlockedImageModel - generic blocked setting 36 // ContentSettingBlockedImageModel - generic blocked setting
35 // ContentSettingGeolocationImageModel - geolocation 37 // ContentSettingGeolocationImageModel - geolocation
36 // ContentSettingRPHImageModel - protocol handlers 38 // ContentSettingRPHImageModel - protocol handlers
37 // ContentSettingMIDISysExImageModel - midi sysex 39 // ContentSettingMIDISysExImageModel - midi sysex
40 // ContentSettingDownloadsImageModel - automatic downloads
38 // ContentSettingMediaImageModel - media 41 // ContentSettingMediaImageModel - media
39 // ContentSettingSubresourceFilterImageModel - deceptive content 42 // ContentSettingSubresourceFilterImageModel - deceptive content
40 43
41 class ContentSettingBlockedImageModel : public ContentSettingSimpleImageModel { 44 class ContentSettingBlockedImageModel : public ContentSettingSimpleImageModel {
42 public: 45 public:
43 explicit ContentSettingBlockedImageModel(ContentSettingsType content_type); 46 explicit ContentSettingBlockedImageModel(ContentSettingsType content_type);
44 47
45 void UpdateFromWebContents(WebContents* web_contents) override; 48 void UpdateFromWebContents(WebContents* web_contents) override;
46 49
47 private: 50 private:
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 class ContentSettingMIDISysExImageModel 91 class ContentSettingMIDISysExImageModel
89 : public ContentSettingSimpleImageModel { 92 : public ContentSettingSimpleImageModel {
90 public: 93 public:
91 ContentSettingMIDISysExImageModel(); 94 ContentSettingMIDISysExImageModel();
92 95
93 void UpdateFromWebContents(WebContents* web_contents) override; 96 void UpdateFromWebContents(WebContents* web_contents) override;
94 private: 97 private:
95 DISALLOW_COPY_AND_ASSIGN(ContentSettingMIDISysExImageModel); 98 DISALLOW_COPY_AND_ASSIGN(ContentSettingMIDISysExImageModel);
96 }; 99 };
97 100
101 class ContentSettingDownloadsImageModel
102 : public ContentSettingSimpleImageModel {
103 public:
104 ContentSettingDownloadsImageModel();
105
106 void UpdateFromWebContents(WebContents* web_contents) override;
107
108 private:
109 DISALLOW_COPY_AND_ASSIGN(ContentSettingDownloadsImageModel);
110 };
111
98 namespace { 112 namespace {
99 113
100 struct ContentSettingsImageDetails { 114 struct ContentSettingsImageDetails {
101 ContentSettingsType type; 115 ContentSettingsType type;
102 const gfx::VectorIcon& icon; 116 const gfx::VectorIcon& icon;
103 int blocked_tooltip_id; 117 int blocked_tooltip_id;
104 int blocked_explanatory_text_id; 118 int blocked_explanatory_text_id;
105 int accessed_tooltip_id; 119 int accessed_tooltip_id;
106 }; 120 };
107 121
108 const ContentSettingsImageDetails kImageDetails[] = { 122 const ContentSettingsImageDetails kImageDetails[] = {
109 {CONTENT_SETTINGS_TYPE_COOKIES, kCookieIcon, IDS_BLOCKED_COOKIES_TITLE, 0, 123 {CONTENT_SETTINGS_TYPE_COOKIES, kCookieIcon, IDS_BLOCKED_COOKIES_TITLE, 0,
110 IDS_ACCESSED_COOKIES_TITLE}, 124 IDS_ACCESSED_COOKIES_TITLE},
111 {CONTENT_SETTINGS_TYPE_IMAGES, kImageIcon, IDS_BLOCKED_IMAGES_TITLE, 0, 0}, 125 {CONTENT_SETTINGS_TYPE_IMAGES, kImageIcon, IDS_BLOCKED_IMAGES_TITLE, 0, 0},
112 {CONTENT_SETTINGS_TYPE_JAVASCRIPT, kCodeIcon, IDS_BLOCKED_JAVASCRIPT_TITLE, 126 {CONTENT_SETTINGS_TYPE_JAVASCRIPT, kCodeIcon, IDS_BLOCKED_JAVASCRIPT_TITLE,
113 0, 0}, 127 0, 0},
114 {CONTENT_SETTINGS_TYPE_PLUGINS, kExtensionIcon, IDS_BLOCKED_PLUGINS_MESSAGE, 128 {CONTENT_SETTINGS_TYPE_PLUGINS, kExtensionIcon, IDS_BLOCKED_PLUGINS_MESSAGE,
115 IDS_BLOCKED_PLUGIN_EXPLANATORY_TEXT, 0}, 129 IDS_BLOCKED_PLUGIN_EXPLANATORY_TEXT, 0},
116 {CONTENT_SETTINGS_TYPE_POPUPS, kWebIcon, IDS_BLOCKED_POPUPS_TOOLTIP, 130 {CONTENT_SETTINGS_TYPE_POPUPS, kWebIcon, IDS_BLOCKED_POPUPS_TOOLTIP,
117 IDS_BLOCKED_POPUPS_EXPLANATORY_TEXT, 0}, 131 IDS_BLOCKED_POPUPS_EXPLANATORY_TEXT, 0},
118 {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, kMixedContentIcon, 132 {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, kMixedContentIcon,
119 IDS_BLOCKED_DISPLAYING_INSECURE_CONTENT, 0, 0}, 133 IDS_BLOCKED_DISPLAYING_INSECURE_CONTENT, 0, 0},
120 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, kExtensionIcon, 134 {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, kExtensionIcon,
121 IDS_BLOCKED_PPAPI_BROKER_TITLE, 0, IDS_ALLOWED_PPAPI_BROKER_TITLE}, 135 IDS_BLOCKED_PPAPI_BROKER_TITLE, 0, IDS_ALLOWED_PPAPI_BROKER_TITLE},
122 {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, kFileDownloadIcon,
123 IDS_BLOCKED_DOWNLOAD_TITLE, IDS_BLOCKED_DOWNLOADS_EXPLANATION,
124 IDS_ALLOWED_DOWNLOAD_TITLE},
125 }; 136 };
126 137
127 // The ordering of the models here influences the order in which icons are 138 // The ordering of the models here influences the order in which icons are
128 // shown in the omnibox. 139 // shown in the omnibox.
129 constexpr ContentSettingsType kContentTypeIconOrder[] = { 140 constexpr ContentSettingsType kContentTypeIconOrder[] = {
130 CONTENT_SETTINGS_TYPE_COOKIES, 141 CONTENT_SETTINGS_TYPE_COOKIES,
131 CONTENT_SETTINGS_TYPE_IMAGES, 142 CONTENT_SETTINGS_TYPE_IMAGES,
132 CONTENT_SETTINGS_TYPE_JAVASCRIPT, 143 CONTENT_SETTINGS_TYPE_JAVASCRIPT,
133 CONTENT_SETTINGS_TYPE_PPAPI_BROKER, 144 CONTENT_SETTINGS_TYPE_PPAPI_BROKER,
134 CONTENT_SETTINGS_TYPE_PLUGINS, 145 CONTENT_SETTINGS_TYPE_PLUGINS,
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 ContentSettingsType content_settings_type) { 211 ContentSettingsType content_settings_type) {
201 if (content_settings_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) 212 if (content_settings_type == CONTENT_SETTINGS_TYPE_GEOLOCATION)
202 return base::MakeUnique<ContentSettingGeolocationImageModel>(); 213 return base::MakeUnique<ContentSettingGeolocationImageModel>();
203 214
204 if (content_settings_type == CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS) 215 if (content_settings_type == CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS)
205 return base::MakeUnique<ContentSettingRPHImageModel>(); 216 return base::MakeUnique<ContentSettingRPHImageModel>();
206 217
207 if (content_settings_type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX) 218 if (content_settings_type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX)
208 return base::MakeUnique<ContentSettingMIDISysExImageModel>(); 219 return base::MakeUnique<ContentSettingMIDISysExImageModel>();
209 220
221 if (content_settings_type == CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS)
222 return base::MakeUnique<ContentSettingDownloadsImageModel>();
223
210 return base::MakeUnique<ContentSettingBlockedImageModel>( 224 return base::MakeUnique<ContentSettingBlockedImageModel>(
211 content_settings_type); 225 content_settings_type);
212 } 226 }
213 227
214 // Generic blocked content settings -------------------------------------------- 228 // Generic blocked content settings --------------------------------------------
215 229
216 ContentSettingBlockedImageModel::ContentSettingBlockedImageModel( 230 ContentSettingBlockedImageModel::ContentSettingBlockedImageModel(
217 ContentSettingsType content_type) 231 ContentSettingsType content_type)
218 : ContentSettingSimpleImageModel(content_type) { 232 : ContentSettingSimpleImageModel(content_type) {
219 } 233 }
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 unsigned int state_flags = 0; 516 unsigned int state_flags = 0;
503 usages_state.GetDetailedInfo(nullptr, &state_flags); 517 usages_state.GetDetailedInfo(nullptr, &state_flags);
504 bool allowed = 518 bool allowed =
505 !!(state_flags & ContentSettingsUsagesState::TABSTATE_HAS_ANY_ALLOWED); 519 !!(state_flags & ContentSettingsUsagesState::TABSTATE_HAS_ANY_ALLOWED);
506 set_icon(ui::kMidiIcon, allowed ? gfx::kNoneIcon : kBlockedBadgeIcon); 520 set_icon(ui::kMidiIcon, allowed ? gfx::kNoneIcon : kBlockedBadgeIcon);
507 set_tooltip(l10n_util::GetStringUTF16(allowed 521 set_tooltip(l10n_util::GetStringUTF16(allowed
508 ? IDS_MIDI_SYSEX_ALLOWED_TOOLTIP 522 ? IDS_MIDI_SYSEX_ALLOWED_TOOLTIP
509 : IDS_MIDI_SYSEX_BLOCKED_TOOLTIP)); 523 : IDS_MIDI_SYSEX_BLOCKED_TOOLTIP));
510 } 524 }
511 525
526 // Automatic downloads ---------------------------------------------------------
527
528 ContentSettingDownloadsImageModel::ContentSettingDownloadsImageModel()
529 : ContentSettingSimpleImageModel(
530 CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS) {}
531
532 void ContentSettingDownloadsImageModel::UpdateFromWebContents(
533 WebContents* web_contents) {
534 set_visible(false);
535 if (!web_contents)
536 return;
537
538 DownloadRequestLimiter* download_request_limiter =
539 g_browser_process->download_request_limiter();
540
541 // DownloadRequestLimiter can be absent in unit_tests.
542 if (!download_request_limiter)
543 return;
544
545 switch (download_request_limiter->GetDownloadStatus(web_contents)) {
546 case DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS:
547 set_visible(true);
548 set_icon(kFileDownloadIcon, gfx::kNoneIcon);
549 set_explanatory_string_id(0);
550 set_tooltip(l10n_util::GetStringUTF16(IDS_ALLOWED_DOWNLOAD_TITLE));
551 return;
552 case DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED:
553 set_visible(true);
554 set_icon(kFileDownloadIcon, kBlockedBadgeIcon);
555 set_explanatory_string_id(IDS_BLOCKED_DOWNLOADS_EXPLANATION);
556 set_tooltip(l10n_util::GetStringUTF16(IDS_BLOCKED_DOWNLOAD_TITLE));
557 return;
558 default:
559 // No need to show icon otherwise.
560 return;
561 }
562 }
563
512 // Base class ------------------------------------------------------------------ 564 // Base class ------------------------------------------------------------------
513 565
514 gfx::Image ContentSettingImageModel::GetIcon(SkColor nearby_text_color) const { 566 gfx::Image ContentSettingImageModel::GetIcon(SkColor nearby_text_color) const {
515 #if defined(OS_MACOSX) 567 #if defined(OS_MACOSX)
516 SkColor icon_color = nearby_text_color; 568 SkColor icon_color = nearby_text_color;
517 #else 569 #else
518 SkColor icon_color = color_utils::DeriveDefaultIconColor(nearby_text_color); 570 SkColor icon_color = color_utils::DeriveDefaultIconColor(nearby_text_color);
519 #endif 571 #endif
520 572
521 return gfx::Image( 573 return gfx::Image(
(...skipping 22 matching lines...) Expand all
544 break; 596 break;
545 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: 597 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA:
546 model = base::MakeUnique<ContentSettingMediaImageModel>(); 598 model = base::MakeUnique<ContentSettingMediaImageModel>();
547 break; 599 break;
548 case CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER: 600 case CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER:
549 model = base::MakeUnique<ContentSettingSubresourceFilterImageModel>(); 601 model = base::MakeUnique<ContentSettingSubresourceFilterImageModel>();
550 break; 602 break;
551 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 603 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
552 model = base::MakeUnique<ContentSettingMIDISysExImageModel>(); 604 model = base::MakeUnique<ContentSettingMIDISysExImageModel>();
553 break; 605 break;
606 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS:
607 model = base::MakeUnique<ContentSettingDownloadsImageModel>();
608 break;
554 default: 609 default:
555 // All other content settings types use ContentSettingBlockedImageModel. 610 // All other content settings types use ContentSettingBlockedImageModel.
556 model = base::MakeUnique<ContentSettingBlockedImageModel>(icon); 611 model = base::MakeUnique<ContentSettingBlockedImageModel>(icon);
557 break; 612 break;
558 } 613 }
559 result.push_back(std::move(model)); 614 result.push_back(std::move(model));
560 } 615 }
561 return result; 616 return result;
562 } 617 }
563 618
(...skipping 12 matching lines...) Expand all
576 631
577 #if defined(OS_MACOSX) 632 #if defined(OS_MACOSX)
578 bool ContentSettingImageModel::UpdateFromWebContentsAndCheckIfIconChanged( 633 bool ContentSettingImageModel::UpdateFromWebContentsAndCheckIfIconChanged(
579 content::WebContents* web_contents) { 634 content::WebContents* web_contents) {
580 const gfx::VectorIcon* old_icon = icon_; 635 const gfx::VectorIcon* old_icon = icon_;
581 const gfx::VectorIcon* old_badge_icon = icon_badge_; 636 const gfx::VectorIcon* old_badge_icon = icon_badge_;
582 UpdateFromWebContents(web_contents); 637 UpdateFromWebContents(web_contents);
583 return old_icon != icon_ && old_badge_icon != icon_badge_; 638 return old_icon != icon_ && old_badge_icon != icon_badge_;
584 } 639 }
585 #endif 640 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698