15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/content_settings/content_setting_image_model.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingBlockedImageModel : public ContentSettingImageModel {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ContentSettingBlockedImageModel(
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ContentSettingsType content_settings_type);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateFromWebContents(WebContents* web_contents) OVERRIDE;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingGeolocationImageModel : public ContentSettingImageModel {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingGeolocationImageModel();
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateFromWebContents(WebContents* web_contents) OVERRIDE;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Image model for displaying media icons in the location bar.
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ContentSettingMediaImageModel : public ContentSettingImageModel {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  explicit ContentSettingMediaImageModel(ContentSettingsType type);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void UpdateFromWebContents(WebContents* web_contents) OVERRIDE;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingRPHImageModel : public ContentSettingImageModel {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingRPHImageModel();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateFromWebContents(WebContents* web_contents) OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingNotificationsImageModel : public ContentSettingImageModel {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingNotificationsImageModel();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateFromWebContents(WebContents* web_contents) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass ContentSettingMIDISysExImageModel : public ContentSettingImageModel {
56ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch public:
57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  ContentSettingMIDISysExImageModel();
58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual void UpdateFromWebContents(WebContents* web_contents) OVERRIDE;
60ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch};
61ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ContentSettingsTypeIdEntry {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingsType type;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int id;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetIdForContentType(const ContentSettingsTypeIdEntry* entries,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        size_t num_entries,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        ContentSettingsType type) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < num_entries; ++i) {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (entries[i].type == type)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return entries[i].id;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBlockedImageModel::ContentSettingBlockedImageModel(
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentSettingsType content_settings_type)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : ContentSettingImageModel(content_settings_type) {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingBlockedImageModel::UpdateFromWebContents(
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContents* web_contents) {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_visible(false);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!web_contents)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const ContentSettingsTypeIdEntry kBlockedIconIDs[] = {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_COOKIES, IDR_BLOCKED_COOKIES},
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_IMAGES, IDR_BLOCKED_IMAGES},
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDR_BLOCKED_JAVASCRIPT},
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_PLUGINS, IDR_BLOCKED_PLUGINS},
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_POPUPS, IDR_BLOCKED_POPUPS},
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, IDR_BLOCKED_MIXED_CONTENT},
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDR_BLOCKED_PPAPI_BROKER},
1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDR_BLOCKED_DOWNLOADS},
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const ContentSettingsTypeIdEntry kBlockedTooltipIDs[] = {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_TITLE},
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_TITLE},
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_TITLE},
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_MESSAGE},
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_TOOLTIP},
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_BLOCKED_DISPLAYING_INSECURE_CONTENT},
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_TITLE},
1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_TITLE},
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const ContentSettingsTypeIdEntry kBlockedExplanatoryTextIDs[] = {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_EXPLANATORY_TEXT},
1156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGIN_EXPLANATORY_TEXT},
1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS,
1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        IDS_BLOCKED_DOWNLOADS_EXPLANATION},
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingsType type = get_content_settings_type();
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int icon_id = GetIdForContentType(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kBlockedIconIDs, arraysize(kBlockedIconIDs), type);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int tooltip_id = GetIdForContentType(
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kBlockedTooltipIDs, arraysize(kBlockedTooltipIDs), type);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int explanation_id = GetIdForContentType(
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kBlockedExplanatoryTextIDs, arraysize(kBlockedExplanatoryTextIDs), type);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // For plugins, don't show the animated explanation unless the plugin was
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // blocked despite the user's content settings being set to allow it (e.g.
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // due to auto-blocking NPAPI plugins).
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Profile* profile =
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      Profile::FromBrowserContext(web_contents->GetBrowserContext());
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (type == CONTENT_SETTINGS_TYPE_PLUGINS) {
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    GURL url = web_contents->GetURL();
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (map->GetContentSetting(url, url, type, std::string()) !=
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        CONTENT_SETTING_ALLOW)
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      explanation_id = 0;
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If a content type is blocked by default and was accessed, display the
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // content blocked page action.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabSpecificContentSettings* content_settings =
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TabSpecificContentSettings::FromWebContents(web_contents);
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!content_settings)
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (!content_settings->IsContentBlocked(type)) {
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (!content_settings->IsContentAllowed(type))
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return;
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // For cookies, only show the cookie blocked page action if cookies are
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // blocked by default.
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (type == CONTENT_SETTINGS_TYPE_COOKIES &&
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        (map->GetDefaultContentSetting(type, NULL) != CONTENT_SETTING_BLOCK))
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const ContentSettingsTypeIdEntry kAccessedIconIDs[] = {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      {CONTENT_SETTINGS_TYPE_COOKIES, IDR_ACCESSED_COOKIES},
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDR_BLOCKED_PPAPI_BROKER},
1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDR_ALLOWED_DOWNLOADS},
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const ContentSettingsTypeIdEntry kAccessedTooltipIDs[] = {
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      {CONTENT_SETTINGS_TYPE_COOKIES, IDS_ACCESSED_COOKIES_TITLE},
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_TITLE},
1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_TITLE},
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    icon_id = GetIdForContentType(
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        kAccessedIconIDs, arraysize(kAccessedIconIDs), type);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tooltip_id = GetIdForContentType(
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        kAccessedTooltipIDs, arraysize(kAccessedTooltipIDs), type);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explanation_id = 0;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_visible(true);
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(icon_id);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_icon(icon_id);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_explanatory_string_id(explanation_id);
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(tooltip_id);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_tooltip(l10n_util::GetStringUTF8(tooltip_id));
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingGeolocationImageModel::ContentSettingGeolocationImageModel()
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : ContentSettingImageModel(CONTENT_SETTINGS_TYPE_GEOLOCATION) {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingGeolocationImageModel::UpdateFromWebContents(
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContents* web_contents) {
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_visible(false);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!web_contents)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabSpecificContentSettings* content_settings =
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TabSpecificContentSettings::FromWebContents(web_contents);
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!content_settings)
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
194ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  const ContentSettingsUsagesState& usages_state = content_settings->
195ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      geolocation_usages_state();
196ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  if (usages_state.state_map().empty())
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_visible(true);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If any embedded site has access the allowed icon takes priority over the
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // blocked icon.
202ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  unsigned int state_flags = 0;
203ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  usages_state.GetDetailedInfo(NULL, &state_flags);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool allowed =
205ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      !!(state_flags & ContentSettingsUsagesState::TABSTATE_HAS_ANY_ALLOWED);
2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  set_icon(allowed ? IDR_ALLOWED_LOCATION : IDR_BLOCKED_LOCATION);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_tooltip(l10n_util::GetStringUTF8(allowed ?
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_GEOLOCATION_ALLOWED_TOOLTIP : IDS_GEOLOCATION_BLOCKED_TOOLTIP));
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ContentSettingMediaImageModel::ContentSettingMediaImageModel(
2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    ContentSettingsType type)
2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    : ContentSettingImageModel(type) {
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaImageModel::UpdateFromWebContents(
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WebContents* web_contents) {
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_visible(false);
2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // As long as a single icon is used to display the status of the camera and
2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // microphone usage only display an icon for the
2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // CONTENT_SETTINGS_TYPE_MEDIASTREAM. Don't display anything for
2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA.
2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // FIXME: Remove this hack and either display a two omnibox icons (one for
2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // camera and one for microphone), or don't create one image model per
2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // content type but per icon to display. The later is probably the right
2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // thing to do, bebacuse this also allows to add more content settings type
2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // for which no omnibox icon exists.
2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (get_content_settings_type() == CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC ||
2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      get_content_settings_type() == CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA) {
2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return;
2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // The ContentSettingMediaImageModel must not be used with a content type
2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // other then: CONTENT_SETTINGS_TYPE_MEDIASTREAM,
2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA.
2397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  DCHECK_EQ(get_content_settings_type(), CONTENT_SETTINGS_TYPE_MEDIASTREAM);
2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!web_contents)
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabSpecificContentSettings* content_settings =
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TabSpecificContentSettings::FromWebContents(web_contents);
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!content_settings)
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TabSpecificContentSettings::MicrophoneCameraState state =
2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      content_settings->GetMicrophoneCameraState();
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
25134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  switch (state) {
25234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    case TabSpecificContentSettings::MICROPHONE_CAMERA_NOT_ACCESSED:
25334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      // If neither the microphone nor the camera stream was accessed then no
25434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      // icon is displayed in the omnibox.
25534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      return;
25634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    case TabSpecificContentSettings::MICROPHONE_ACCESSED:
25734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_icon(IDR_ASK_MEDIA);
25834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_tooltip(l10n_util::GetStringUTF8(IDS_MICROPHONE_ACCESSED));
25934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      break;
26034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    case TabSpecificContentSettings::CAMERA_ACCESSED:
26134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_icon(IDR_ASK_MEDIA);
26234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_tooltip(l10n_util::GetStringUTF8(IDS_CAMERA_ACCESSED));
26334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      break;
26434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    case TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED:
26534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_icon(IDR_ASK_MEDIA);
26634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_tooltip(l10n_util::GetStringUTF8(IDS_MICROPHONE_CAMERA_ALLOWED));
26734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      break;
26834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    case TabSpecificContentSettings::MICROPHONE_BLOCKED:
26934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_icon(IDR_BLOCKED_MEDIA);
27034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_tooltip(l10n_util::GetStringUTF8(IDS_MICROPHONE_BLOCKED));
27134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      break;
27234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    case TabSpecificContentSettings::CAMERA_BLOCKED:
27334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_icon(IDR_BLOCKED_MEDIA);
27434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_tooltip(l10n_util::GetStringUTF8(IDS_CAMERA_BLOCKED));
27534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      break;
27634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    case TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED:
27734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_icon(IDR_BLOCKED_MEDIA);
27834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      set_tooltip(l10n_util::GetStringUTF8(IDS_MICROPHONE_CAMERA_BLOCKED));
27934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      break;
2807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_visible(true);
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingRPHImageModel::ContentSettingRPHImageModel()
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : ContentSettingImageModel(
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS) {
2877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  set_icon(IDR_REGISTER_PROTOCOL_HANDLER);
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_tooltip(l10n_util::GetStringUTF8(IDS_REGISTER_PROTOCOL_HANDLER_TOOLTIP));
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHImageModel::UpdateFromWebContents(
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContents* web_contents) {
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_visible(false);
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!web_contents)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabSpecificContentSettings* content_settings =
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TabSpecificContentSettings::FromWebContents(web_contents);
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!content_settings)
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (content_settings->pending_protocol_handler().IsEmpty())
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_visible(true);
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingNotificationsImageModel::ContentSettingNotificationsImageModel()
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : ContentSettingImageModel(CONTENT_SETTINGS_TYPE_NOTIFICATIONS) {
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingNotificationsImageModel::UpdateFromWebContents(
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContents* web_contents) {
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifications do not have a bubble.
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_visible(false);
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
317ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochContentSettingMIDISysExImageModel::ContentSettingMIDISysExImageModel()
318ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    : ContentSettingImageModel(CONTENT_SETTINGS_TYPE_MIDI_SYSEX) {
319ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
320ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
321ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid ContentSettingMIDISysExImageModel::UpdateFromWebContents(
322ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    WebContents* web_contents) {
323ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  set_visible(false);
324ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (!web_contents)
325ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    return;
326ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  TabSpecificContentSettings* content_settings =
327ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      TabSpecificContentSettings::FromWebContents(web_contents);
328ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (!content_settings)
329ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    return;
330ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  const ContentSettingsUsagesState& usages_state =
331ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      content_settings->midi_usages_state();
332ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (usages_state.state_map().empty())
333ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    return;
334ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  set_visible(true);
335ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
336ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // If any embedded site has access the allowed icon takes priority over the
337ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // blocked icon.
338ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  unsigned int state_flags = 0;
339ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  usages_state.GetDetailedInfo(NULL, &state_flags);
340ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool allowed =
341ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      !!(state_flags & ContentSettingsUsagesState::TABSTATE_HAS_ANY_ALLOWED);
342ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  set_icon(allowed ? IDR_ALLOWED_MIDI_SYSEX : IDR_BLOCKED_MIDI_SYSEX);
343ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  set_tooltip(l10n_util::GetStringUTF8(allowed ?
344ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      IDS_MIDI_SYSEX_ALLOWED_TOOLTIP : IDS_MIDI_SYSEX_BLOCKED_TOOLTIP));
345ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
346ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingImageModel::ContentSettingImageModel(
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentSettingsType content_settings_type)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : content_settings_type_(content_settings_type),
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      is_visible_(false),
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      icon_(0),
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      explanatory_string_id_(0) {
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingImageModel*
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentSettingImageModel::CreateContentSettingImageModel(
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentSettingsType content_settings_type) {
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (content_settings_type) {
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CONTENT_SETTINGS_TYPE_GEOLOCATION:
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return new ContentSettingGeolocationImageModel();
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return new ContentSettingNotificationsImageModel();
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS:
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return new ContentSettingRPHImageModel();
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case CONTENT_SETTINGS_TYPE_MEDIASTREAM:
3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC:
3687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA:
3697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return new ContentSettingMediaImageModel(content_settings_type);
370ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
371ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      return new ContentSettingMIDISysExImageModel();
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return new ContentSettingBlockedImageModel(content_settings_type);
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
376