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/content_settings/tab_specific_content_settings.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <list> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_appcache_helper.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_database_helper.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_file_system_helper.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_indexed_db_helper.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/cookies_tree_model.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_utils.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/browser/content_settings_details.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_details.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/render_frame_host.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/fileapi/file_system_types.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationController; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationEntry; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::RenderViewHost; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DEFINE_WEB_CONTENTS_USER_DATA_KEY(TabSpecificContentSettings); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabSpecificContentSettings::SiteDataObserver::SiteDataObserver( 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* tab_specific_content_settings) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : tab_specific_content_settings_(tab_specific_content_settings) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_specific_content_settings_->AddSiteDataObserver(this); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabSpecificContentSettings::SiteDataObserver::~SiteDataObserver() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (tab_specific_content_settings_) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_specific_content_settings_->RemoveSiteDataObserver(this); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::SiteDataObserver::ContentSettingsDestroyed() { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_specific_content_settings_ = NULL; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabSpecificContentSettings::TabSpecificContentSettings(WebContents* tab) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : content::WebContentsObserver(tab), 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_(Profile::FromBrowserContext(tab->GetBrowserContext())), 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_local_shared_objects_(profile_), 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_local_shared_objects_(profile_), 68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch geolocation_usages_state_(profile_, CONTENT_SETTINGS_TYPE_GEOLOCATION), 69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) midi_usages_state_(profile_, CONTENT_SETTINGS_TYPE_MIDI_SYSEX), 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_protocol_handler_(ProtocolHandler::EmptyProtocolHandler()), 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_protocol_handler_(ProtocolHandler::EmptyProtocolHandler()), 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_protocol_handler_setting_(CONTENT_SETTING_DEFAULT), 7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) load_plugins_link_enabled_(true), 7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) observer_(this) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearBlockedContentSettingsExceptForCookies(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearCookieSpecificContentSettings(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) observer_.Add(profile_->GetHostContentSettingsMap()); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabSpecificContentSettings::~TabSpecificContentSettings() { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER( 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteDataObserver, observer_list_, ContentSettingsDestroyed()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabSpecificContentSettings* TabSpecificContentSettings::Get( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, int render_view_id) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* view = RenderViewHost::FromID(render_process_id, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_id); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!view) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents = WebContents::FromRenderViewHost(view); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!web_contents) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return TabSpecificContentSettings::FromWebContents(web_contents); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TabSpecificContentSettings* TabSpecificContentSettings::GetForFrame( 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_process_id, int render_frame_id) { 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* frame = content::RenderFrameHost::FromID( 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, render_frame_id); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* web_contents = WebContents::FromRenderFrameHost(frame); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!web_contents) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return NULL; 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return TabSpecificContentSettings::FromWebContents(web_contents); 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::CookiesRead(int render_process_id, 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& frame_url, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list, 12123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool blocked_by_policy, 12223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool is_for_blocking_resource) { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TabSpecificContentSettings* settings = 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetForFrame(render_process_id, render_frame_id); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings->OnCookiesRead(url, frame_url, cookie_list, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_by_policy); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderManager::RecordCookieEvent( 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_id, 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url, 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) frame_url, 13523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) is_for_blocking_resource, 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::COOKIE_EVENT_SEND, 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &cookie_list); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::CookieChanged( 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& frame_url, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieOptions& options, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TabSpecificContentSettings* settings = 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetForFrame(render_process_id, render_frame_id); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings->OnCookieChanged(url, frame_url, cookie_line, options, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_by_policy); 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderManager::RecordCookieEvent( 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_id, 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url, 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) frame_url, 16023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) false /*is_critical_request*/, 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::COOKIE_EVENT_CHANGE, 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::WebDatabaseAccessed( 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_name, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TabSpecificContentSettings* settings = GetForFrame( 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, render_frame_id); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings->OnWebDatabaseAccessed(url, name, display_name, blocked_by_policy); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::DOMStorageAccessed(int render_process_id, 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool local, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TabSpecificContentSettings* settings = GetForFrame( 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, render_frame_id); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings->OnLocalStorageAccessed(url, local, blocked_by_policy); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TabSpecificContentSettings::IndexedDBAccessed( 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_process_id, 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& url, 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& description, 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool blocked_by_policy) { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TabSpecificContentSettings* settings = GetForFrame( 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, render_frame_id); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings->OnIndexedDBAccessed(url, description, blocked_by_policy); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::FileSystemAccessed(int render_process_id, 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TabSpecificContentSettings* settings = GetForFrame( 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, render_frame_id); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings->OnFileSystemAccessed(url, blocked_by_policy); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TabSpecificContentSettings::IsContentBlocked( 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) const { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(content_type != CONTENT_SETTINGS_TYPE_GEOLOCATION) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Geolocation settings handled by ContentSettingGeolocationImageModel"; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Notifications settings handled by " 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "ContentSettingsNotificationsImageModel"; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_IMAGES || 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_JAVASCRIPT || 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_PLUGINS || 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_COOKIES || 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_POPUPS || 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_MIXEDSCRIPT || 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_MEDIASTREAM || 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC || 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA || 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content_type == CONTENT_SETTINGS_TYPE_PPAPI_BROKER || 237a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS || 238a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content_type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX) { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content_blocked_[content_type]; 2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TabSpecificContentSettings::IsBlockageIndicated( 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) const { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content_blockage_indicated_to_user_[content_type]; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::SetBlockageHasBeenIndicated( 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blockage_indicated_to_user_[content_type] = true; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TabSpecificContentSettings::IsContentAllowed( 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) const { 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This method currently only returns meaningful values for the content type 2587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // cookies, mediastream, PPAPI broker, and downloads. 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (content_type != CONTENT_SETTINGS_TYPE_COOKIES && 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type != CONTENT_SETTINGS_TYPE_MEDIASTREAM && 2617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content_type != CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC && 2627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content_type != CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA && 2637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content_type != CONTENT_SETTINGS_TYPE_PPAPI_BROKER && 264a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content_type != CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS && 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content_type != CONTENT_SETTINGS_TYPE_MIDI_SYSEX) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return content_allowed_[content_type]; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void TabSpecificContentSettings::OnContentBlocked(ContentSettingsType type) { 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(type != CONTENT_SETTINGS_TYPE_GEOLOCATION) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Geolocation settings handled by OnGeolocationPermissionSet"; 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type < 0 || type >= CONTENT_SETTINGS_NUM_TYPES) 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // Media is different from other content setting types since it allows new 27934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // setting to kick in without reloading the page, and the UI for media is 28034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // always reflecting the newest permission setting. 28134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) switch (type) { 28234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: 28334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: 28434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)#if defined(OS_ANDROID) 28534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: 28634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)#endif 28734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) content_allowed_[type] = false; 28834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 28934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) default: 29034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) content_allowed_[type] = true; 29134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 29234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_ANDROID) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == CONTENT_SETTINGS_TYPE_POPUPS) { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For Android we do not have a persistent button that will always be 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visible for blocked popups. Instead we have info bars which could be 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // dismissed. Have to clear the blocked state so we properly notify the 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // relevant pieces again. 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blocked_[type] = false; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blockage_indicated_to_user_[type] = false; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!content_blocked_[type]) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blocked_[type] = true; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO: it would be nice to have a way of mocking this in tests. 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents()), 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TabSpecificContentSettings::OnContentAllowed(ContentSettingsType type) { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(type != CONTENT_SETTINGS_TYPE_GEOLOCATION) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Geolocation settings handled by OnGeolocationPermissionSet"; 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool access_changed = false; 31934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) switch (type) { 32034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: 32134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: 32268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_ANDROID) 32334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 32534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // The setting for media is overwritten here because media does not need 32634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // to reload the page to have the new setting kick in. See issue/175993. 32734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (content_blocked_[type]) { 32834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) content_blocked_[type] = false; 32934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) access_changed = true; 33034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 33134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 33234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) default: 33334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 33434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!content_allowed_[type]) { 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_allowed_[type] = true; 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) access_changed = true; 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (access_changed) { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents()), 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::OnCookiesRead( 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& frame_url, 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list, 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cookie_list.empty()) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blocked_by_policy) { 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_local_shared_objects_.cookies()->AddReadCookies( 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frame_url, url, cookie_list); 359a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_local_shared_objects_.cookies()->AddReadCookies( 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frame_url, url, cookie_list); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifySiteDataObservers(); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::OnCookieChanged( 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& frame_url, 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieOptions& options, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blocked_by_policy) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_local_shared_objects_.cookies()->AddChangedCookie( 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frame_url, url, cookie_line, options); 378a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_local_shared_objects_.cookies()->AddChangedCookie( 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frame_url, url, cookie_line, options); 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifySiteDataObservers(); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::OnIndexedDBAccessed( 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& description, 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blocked_by_policy) { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_local_shared_objects_.indexed_dbs()->AddIndexedDB( 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, description); 395a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_local_shared_objects_.indexed_dbs()->AddIndexedDB( 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, description); 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifySiteDataObservers(); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::OnLocalStorageAccessed( 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool local, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LocalSharedObjectsContainer& container = blocked_by_policy ? 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_local_shared_objects_ : allowed_local_shared_objects_; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CannedBrowsingDataLocalStorageHelper* helper = 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) local ? container.local_storages() : container.session_storages(); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddLocalStorage(url); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blocked_by_policy) 416a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifySiteDataObservers(); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::OnWebDatabaseAccessed( 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 425a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 426a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_name, 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blocked_by_policy) { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_local_shared_objects_.databases()->AddDatabase( 4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url, base::UTF16ToUTF8(name), base::UTF16ToUTF8(display_name)); 431a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_local_shared_objects_.databases()->AddDatabase( 4345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url, base::UTF16ToUTF8(name), base::UTF16ToUTF8(display_name)); 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifySiteDataObservers(); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::OnFileSystemAccessed( 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blocked_by_policy) { 44503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) blocked_local_shared_objects_.file_systems()->AddFileSystem( 44603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) url, storage::kFileSystemTypeTemporary, 0); 447a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 44903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) allowed_local_shared_objects_.file_systems()->AddFileSystem( 45003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) url, storage::kFileSystemTypeTemporary, 0); 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifySiteDataObservers(); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::OnGeolocationPermissionSet( 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& requesting_origin, 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allowed) { 460ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch geolocation_usages_state_.OnPermissionSet(requesting_origin, allowed); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents()), 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_ANDROID) 46868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void TabSpecificContentSettings::OnProtectedMediaIdentifierPermissionSet( 46968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const GURL& requesting_origin, 47068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool allowed) { 47168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (allowed) { 47268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER); 47368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } else { 474a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER); 47568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 47668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 47768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif 47868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TabSpecificContentSettings::MicrophoneCameraState 4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TabSpecificContentSettings::GetMicrophoneCameraState() const { 48134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (IsContentAllowed(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC) && 48234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) IsContentAllowed(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA)) { 48334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return MICROPHONE_CAMERA_ACCESSED; 48434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } else if (IsContentAllowed(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC)) { 48534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return MICROPHONE_ACCESSED; 48634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } else if (IsContentAllowed(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA)) { 48734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return CAMERA_ACCESSED; 48834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 4897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 49034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (IsContentBlocked(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC) && 49134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) IsContentBlocked(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA)) { 49234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return MICROPHONE_CAMERA_BLOCKED; 49334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } else if (IsContentBlocked(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC)) { 49434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return MICROPHONE_BLOCKED; 49534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } else if (IsContentBlocked(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA)) { 49634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return CAMERA_BLOCKED; 49734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 49834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 49934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return MICROPHONE_CAMERA_NOT_ACCESSED; 5007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void TabSpecificContentSettings::OnMediaStreamPermissionSet( 5033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GURL& request_origin, 50468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const MediaStreamDevicesController::MediaStreamTypeSettingsMap& 5053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) request_permissions) { 5063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) media_stream_access_origin_ = request_origin; 5073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 50868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) MediaStreamDevicesController::MediaStreamTypeSettingsMap::const_iterator it = 50968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) request_permissions.find(content::MEDIA_DEVICE_AUDIO_CAPTURE); 5103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (it != request_permissions.end()) { 51168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) media_stream_requested_audio_device_ = it->second.requested_device_id; 51234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) switch (it->second.permission) { 51334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_NONE: 51434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) NOTREACHED(); 51534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 51634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_ALLOWED: 51734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC); 51834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 51934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // TODO(grunell): UI should show for what reason access has been blocked. 52034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_BLOCKED_BY_POLICY: 52134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_BLOCKED_BY_USER_SETTING: 52234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_BLOCKED_BY_USER: 52334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC); 52434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 52534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 5263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 5277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) it = request_permissions.find(content::MEDIA_DEVICE_VIDEO_CAPTURE); 5293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (it != request_permissions.end()) { 53068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) media_stream_requested_video_device_ = it->second.requested_device_id; 53134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) switch (it->second.permission) { 53234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_NONE: 53334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) NOTREACHED(); 53434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 53534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_ALLOWED: 53634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA); 53734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 53834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // TODO(grunell): UI should show for what reason access has been blocked. 53934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_BLOCKED_BY_POLICY: 54034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_BLOCKED_BY_USER_SETTING: 54134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case MediaStreamDevicesController::MEDIA_BLOCKED_BY_USER: 54234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA); 54334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 54434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 5453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TabSpecificContentSettings::OnMidiSysExAccessed( 549a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const GURL& requesting_origin) { 550a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) midi_usages_state_.OnPermissionSet(requesting_origin, true); 551ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch OnContentAllowed(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); 552a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 553a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 5545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TabSpecificContentSettings::OnMidiSysExAccessBlocked( 555a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const GURL& requesting_origin) { 556a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) midi_usages_state_.OnPermissionSet(requesting_origin, false); 557a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); 558a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 559a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::ClearBlockedContentSettingsExceptForCookies() { 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(content_blocked_); ++i) { 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i == CONTENT_SETTINGS_TYPE_COOKIES) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blocked_[i] = false; 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_allowed_[i] = false; 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blockage_indicated_to_user_[i] = false; 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_plugins_link_enabled_ = true; 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents()), 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::ClearCookieSpecificContentSettings() { 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_local_shared_objects_.Reset(); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_local_shared_objects_.Reset(); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blocked_[CONTENT_SETTINGS_TYPE_COOKIES] = false; 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_allowed_[CONTENT_SETTINGS_TYPE_COOKIES] = false; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blockage_indicated_to_user_[CONTENT_SETTINGS_TYPE_COOKIES] = false; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents()), 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid TabSpecificContentSettings::SetDownloadsBlocked(bool blocked) { 5887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content_blocked_[CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS] = blocked; 5897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content_allowed_[CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS] = !blocked; 5907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content_blockage_indicated_to_user_[ 5917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS] = false; 5927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::NotificationService::current()->Notify( 5937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 5947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::Source<WebContents>(web_contents()), 5957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::NotificationService::NoDetails()); 5967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 5977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::SetPopupsBlocked(bool blocked) { 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blocked_[CONTENT_SETTINGS_TYPE_POPUPS] = blocked; 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blockage_indicated_to_user_[CONTENT_SETTINGS_TYPE_POPUPS] = false; 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents()), 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::GeolocationDidNavigate( 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::LoadCommittedDetails& details) { 609ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch geolocation_usages_state_.DidNavigate(details); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TabSpecificContentSettings::MidiDidNavigate( 613a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const content::LoadCommittedDetails& details) { 614a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) midi_usages_state_.DidNavigate(details); 615a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 616a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::ClearGeolocationContentSettings() { 618ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch geolocation_usages_state_.ClearStateMap(); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TabSpecificContentSettings::ClearMidiContentSettings() { 622a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) midi_usages_state_.ClearStateMap(); 623a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 624a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TabSpecificContentSettings::SetPepperBrokerAllowed(bool allowed) { 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (allowed) { 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_PPAPI_BROKER); 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 629a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_PPAPI_BROKER); 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TabSpecificContentSettings::RenderFrameForInterstitialPageCreated( 6345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* render_frame_host) { 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We want to tell the renderer-side code to ignore content settings for this 6368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // page. 6375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_host->Send(new ChromeViewMsg_SetAsInterstitial( 6385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_host->GetRoutingID())); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TabSpecificContentSettings::OnMessageReceived( 642cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const IPC::Message& message, 643cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RenderFrameHost* render_frame_host) { 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool handled = true; 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(TabSpecificContentSettings, message) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ContentBlocked, OnContentBlocked) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_END_MESSAGE_MAP() 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handled; 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::DidNavigateMainFrame( 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::LoadCommittedDetails& details, 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::FrameNavigateParams& params) { 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!details.is_in_page) { 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear "blocked" flags. 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearBlockedContentSettingsExceptForCookies(); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GeolocationDidNavigate(details); 6595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MidiDidNavigate(details); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::DidStartProvisionalLoadForFrame( 664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RenderFrameHost* render_frame_host, 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_error_page, 667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool is_iframe_srcdoc) { 668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (render_frame_host->GetParent()) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we're displaying a network error page do not reset the content 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // settings delegate's cookies so the user has a chance to modify cookie 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // settings. 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_error_page) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearCookieSpecificContentSettings(); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearGeolocationContentSettings(); 6775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ClearMidiContentSettings(); 6784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ClearPendingProtocolHandler(); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::AppCacheAccessed(const GURL& manifest_url, 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) { 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blocked_by_policy) { 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_local_shared_objects_.appcaches()->AddAppCache(manifest_url); 685a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_local_shared_objects_.appcaches()->AddAppCache(manifest_url); 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 69203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void TabSpecificContentSettings::OnContentSettingChanged( 69303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const ContentSettingsPattern& primary_pattern, 69403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const ContentSettingsPattern& secondary_pattern, 69503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ContentSettingsType content_type, 69603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::string resource_identifier) { 69703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const ContentSettingsDetails details( 69803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) primary_pattern, secondary_pattern, content_type, resource_identifier); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NavigationController& controller = web_contents()->GetController(); 7003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NavigationEntry* entry = controller.GetVisibleEntry(); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL entry_url; 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (entry) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry_url = entry->GetURL(); 70403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (details.update_all() || 7053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // The visible NavigationEntry is the URL in the URL field of a tab. 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently this should be matched by the |primary_pattern|. 70703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) details.primary_pattern().Matches(entry_url)) { 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererContentSettingRules rules; 71134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) GetRendererContentSettingRules(profile->GetHostContentSettingsMap(), 71234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) &rules); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ChromeViewMsg_SetContentSettingRules(rules)); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::AddSiteDataObserver( 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteDataObserver* observer) { 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer_list_.AddObserver(observer); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::RemoveSiteDataObserver( 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteDataObserver* observer) { 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer_list_.RemoveObserver(observer); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabSpecificContentSettings::NotifySiteDataObservers() { 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(SiteDataObserver, observer_list_, OnSiteDataAccessed()); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 730