tab_specific_content_settings.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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)#ifndef CHROME_BROWSER_CONTENT_SETTINGS_TAB_SPECIFIC_CONTENT_SETTINGS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CONTENT_SETTINGS_TAB_SPECIFIC_CONTENT_SETTINGS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/local_shared_objects_container.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/geolocation/geolocation_settings_state.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings_types.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/custom_handlers/protocol_handler.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_user_data.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookiesTreeModel; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewHost; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieOptions; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class manages state about permissions, content settings, cookies and 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// site data for a specific WebContents. It tracks which content was accessed 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and which content was blocked. Based on this it provides information about 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// which types of content were accessed and blocked. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TabSpecificContentSettings 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public content::WebContentsObserver, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::NotificationObserver, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::WebContentsUserData<TabSpecificContentSettings> { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Classes that want to be notified about site data events must implement 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this abstract class and add themselves as observer to the 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |TabSpecificContentSettings|. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class SiteDataObserver { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit SiteDataObserver( 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* tab_specific_content_settings); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SiteDataObserver(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called whenever site data is accessed. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnSiteDataAccessed() = 0; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* tab_specific_content_settings() { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tab_specific_content_settings_; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the TabSpecificContentSettings is destroyed; nulls out 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the local reference. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ContentSettingsDestroyed(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* tab_specific_content_settings_; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SiteDataObserver); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TabSpecificContentSettings(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the object given a render view's id. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static TabSpecificContentSettings* Get(int render_process_id, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Static methods called on the UI threads. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when cookies for the given URL were read either from within the 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // current page or while loading it. |blocked_by_policy| should be true, if 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reading cookies was blocked due to the user's content settings. In that 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // case, this function should invoke OnContentBlocked. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CookiesRead(int render_process_id, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_url, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a specific cookie in the current page was changed. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |blocked_by_policy| should be true, if the cookie was blocked due to the 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user's content settings. In that case, this function should invoke 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnContentBlocked. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CookieChanged(int render_process_id, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_url, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieOptions& options, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a specific Web database in the current page was accessed. If 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // access was blocked due to the user's content settings, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |blocked_by_policy| should be true, and this function should invoke 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnContentBlocked. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void WebDatabaseAccessed(int render_process_id, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& name, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& display_name, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a specific DOM storage area in the current page was 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // accessed. If access was blocked due to the user's content settings, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |blocked_by_policy| should be true, and this function should invoke 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnContentBlocked. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void DOMStorageAccessed(int render_process_id, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool local, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a specific indexed db factory in the current page was 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // accessed. If access was blocked due to the user's content settings, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |blocked_by_policy| should be true, and this function should invoke 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnContentBlocked. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void IndexedDBAccessed(int render_process_id, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& description, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a specific file system in the current page was accessed. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If access was blocked due to the user's content settings, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |blocked_by_policy| should be true, and this function should invoke 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnContentBlocked. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void FileSystemAccessed(int render_process_id, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Resets the |content_blocked_| and |content_allowed_| arrays, except for 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CONTENT_SETTINGS_TYPE_COOKIES related information. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearBlockedContentSettingsExceptForCookies(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resets all cookies related information. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearCookieSpecificContentSettings(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears the Geolocation settings. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearGeolocationContentSettings(); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Changes the |content_blocked_| entry for popups. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPopupsBlocked(bool blocked); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates Geolocation settings on navigation. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GeolocationDidNavigate( 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::LoadCommittedDetails& details); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether a particular kind of content has been blocked for this 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsContentBlocked(ContentSettingsType content_type) const; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if content blockage was indicated to the user. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsBlockageIndicated(ContentSettingsType content_type) const; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetBlockageHasBeenIndicated(ContentSettingsType content_type); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns whether a particular kind of content has been allowed. Currently 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // only tracks cookies. 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsContentAllowed(ContentSettingsType content_type) const; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<std::string>& BlockedResourcesForType( 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) const; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the GeolocationSettingsState that controls the 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // geolocation API usage on this page. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GeolocationSettingsState& geolocation_settings_state() const { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return geolocation_settings_state_; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call to indicate that there is a protocol handler pending user approval. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_pending_protocol_handler(const ProtocolHandler& handler) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_protocol_handler_ = handler; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProtocolHandler& pending_protocol_handler() const { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pending_protocol_handler_; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearPendingProtocolHandler() { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_protocol_handler_ = ProtocolHandler::EmptyProtocolHandler(); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the previous protocol handler which will be replaced by the 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pending protocol handler. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_previous_protocol_handler(const ProtocolHandler& handler) { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_protocol_handler_ = handler; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProtocolHandler& previous_protocol_handler() const { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return previous_protocol_handler_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set whether the setting for the pending handler is DEFAULT (ignore), 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ALLOW, or DENY. 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_pending_protocol_handler_setting(ContentSetting setting) { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_protocol_handler_setting_ = setting; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting pending_protocol_handler_setting() const { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pending_protocol_handler_setting_; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a pointer to the |LocalSharedObjectsContainer| that contains all 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // allowed local shared objects like cookies, local storage, ... . 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LocalSharedObjectsContainer& allowed_local_shared_objects() const { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allowed_local_shared_objects_; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a pointer to the |LocalSharedObjectsContainer| that contains all 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // blocked local shared objects like cookies, local storage, ... . 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LocalSharedObjectsContainer& blocked_local_shared_objects() const { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return blocked_local_shared_objects_; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool load_plugins_link_enabled() { return load_plugins_link_enabled_; } 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_load_plugins_link_enabled(bool enabled) { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_plugins_link_enabled_ = enabled; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called to indicate whether access to the Pepper broker was allowed or 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // blocked. 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetPepperBrokerAllowed(bool allowed); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::WebContentsObserver overrides. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RenderViewForInterstitialPageCreated( 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidNavigateMainFrame( 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::LoadCommittedDetails& details, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::FrameNavigateParams& params) OVERRIDE; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStartProvisionalLoadForFrame( 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 parent_frame_id, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_error_page, 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_iframe_srcdoc, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AppCacheAccessed(const GURL& manifest_url, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy) OVERRIDE; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers. Public for testing. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnContentBlocked(ContentSettingsType type, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_identifier); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnContentAllowed(ContentSettingsType type); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These methods are invoked on the UI thread by the static functions above. 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Public for testing. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCookiesRead(const GURL& url, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_url, 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCookieChanged(const GURL& url, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_url, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieOptions& options, 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnFileSystemAccessed(const GURL& url, 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnIndexedDBAccessed(const GURL& url, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& description, 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnLocalStorageAccessed(const GURL& url, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool local, 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnWebDatabaseAccessed(const GURL& url, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& name, 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& display_name, 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool blocked_by_policy); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGeolocationPermissionSet(const GURL& requesting_frame, 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allowed); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This method is called when a media stream is allowed. 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnMediaStreamAllowed(); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnMicrophoneAccessed(); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnMicrophoneAccessBlocked(); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnCameraAccessed(); 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnCameraAccessBlocked(); 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds the given |SiteDataObserver|. The |observer| is notified when a 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // locale shared object, like for example a cookie, is accessed. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddSiteDataObserver(SiteDataObserver* observer); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes the given |SiteDataObserver|. 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveSiteDataObserver(SiteDataObserver* observer); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit TabSpecificContentSettings(content::WebContents* tab); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class content::WebContentsUserData<TabSpecificContentSettings>; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddBlockedResource(ContentSettingsType content_type, 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_identifier); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver implementation. 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies all registered |SiteDataObserver|s. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifySiteDataObservers(); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All currently registered |SiteDataObserver|s. 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<SiteDataObserver> observer_list_; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores which content setting types actually have blocked content. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool content_blocked_[CONTENT_SETTINGS_NUM_TYPES]; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores if the blocked content was messaged to the user. 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool content_blockage_indicated_to_user_[CONTENT_SETTINGS_NUM_TYPES]; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Stores which content setting types actually were allowed. 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool content_allowed_[CONTENT_SETTINGS_NUM_TYPES]; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the blocked resources for each content type. 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently only used for plugins. 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<std::set<std::string> > 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_resources_[CONTENT_SETTINGS_NUM_TYPES]; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile of the tab. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the blocked/allowed cookies. 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LocalSharedObjectsContainer allowed_local_shared_objects_; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LocalSharedObjectsContainer blocked_local_shared_objects_; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Manages information about Geolocation API usage in this page. 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GeolocationSettingsState geolocation_settings_state_; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The pending protocol handler, if any. This can be set if 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // registerProtocolHandler was invoked without user gesture. 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The |IsEmpty| method will be true if no protocol handler is 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pending registration. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler pending_protocol_handler_; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The previous protocol handler to be replaced by 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the pending_protocol_handler_, if there is one. Empty if 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // there is no handler which would be replaced. 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler previous_protocol_handler_; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The setting on the pending protocol handler registration. Persisted in case 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the user opens the bubble and makes changes multiple times. 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting pending_protocol_handler_setting_; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores whether the user can load blocked plugins on this page. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool load_plugins_link_enabled_; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TabSpecificContentSettings); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_CONTENT_SETTINGS_TAB_SPECIFIC_CONTENT_SETTINGS_H_ 366