1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Use of this source code is governed by a BSD-style license that can be 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// found in the LICENSE file. 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef ANDROID_WEBVIEW_LIB_AW_CONTENT_BROWSER_CLIENT_H_ 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ANDROID_WEBVIEW_LIB_AW_CONTENT_BROWSER_CLIENT_H_ 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "android_webview/browser/aw_web_preferences_populater.h" 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "base/basictypes.h" 10663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include "base/compiler_specific.h" 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "base/memory/scoped_ptr.h" 12663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include "content/public/browser/content_browser_client.h" 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "net/url_request/url_request_job_factory.h" 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct WebPreferences; 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnamespace android_webview { 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownclass AwBrowserContext; 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownclass JniDependencyFactory; 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownclass AwContentBrowserClient : public content::ContentBrowserClient { 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown public: 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // This is what AwContentBrowserClient::GetAcceptLangs uses. 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static std::string GetAcceptLangsImpl(); 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Deprecated: use AwBrowserContext::GetDefault() instead. 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static AwBrowserContext* GetAwBrowserContext(); 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AwContentBrowserClient(JniDependencyFactory* native_factory); 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual ~AwContentBrowserClient(); 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Overriden methods from ContentBrowserClient. 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void AddCertificate(net::URLRequest* request, 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown net::CertificateMimeType cert_type, 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const void* cert_data, 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown size_t cert_size, 38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov int render_process_id, 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_view_id) OVERRIDE; 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual content::BrowserMainParts* CreateBrowserMainParts( 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const content::MainFunctionParams& parameters) OVERRIDE; 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual content::WebContentsViewDelegate* GetWebContentsViewDelegate( 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::WebContents* web_contents) OVERRIDE; 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void RenderProcessHostCreated( 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::RenderProcessHost* host) OVERRIDE; 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual net::URLRequestContextGetter* CreateRequestContext( 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::BrowserContext* browser_context, 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ProtocolHandlerMap* protocol_handlers) OVERRIDE; 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual net::URLRequestContextGetter* CreateRequestContextForStoragePartition( 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::BrowserContext* browser_context, 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const base::FilePath& partition_path, 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bool in_memory, 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ProtocolHandlerMap* protocol_handlers) OVERRIDE; 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual std::string GetCanonicalEncodingNameByAliasName( 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const std::string& alias_name) OVERRIDE; 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void AppendExtraCommandLineSwitches(CommandLine* command_line, 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int child_process_id) OVERRIDE; 58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual std::string GetApplicationLocale() OVERRIDE; 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual std::string GetAcceptLangs(content::BrowserContext* context) OVERRIDE; 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual gfx::ImageSkia* GetDefaultFavicon() OVERRIDE; 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool AllowAppCache(const GURL& manifest_url, 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& first_party, 63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ResourceContext* context) OVERRIDE; 64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool AllowGetCookie(const GURL& url, 65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& first_party, 66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const net::CookieList& cookie_list, 67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ResourceContext* context, 68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_process_id, 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_view_id) OVERRIDE; 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool AllowSetCookie(const GURL& url, 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& first_party, 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const std::string& cookie_line, 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ResourceContext* context, 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_process_id, 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_view_id, 76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown net::CookieOptions* options) OVERRIDE; 77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool AllowWorkerDatabase( 78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& url, 79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const string16& name, 80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const string16& display_name, 81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned long estimated_size, 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ResourceContext* context, 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const std::vector<std::pair<int, int> >& render_views) OVERRIDE; 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool AllowWorkerFileSystem( 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& url, 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ResourceContext* context, 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const std::vector<std::pair<int, int> >& render_views) OVERRIDE; 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool AllowWorkerIndexedDB( 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& url, 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const string16& name, 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ResourceContext* context, 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const std::vector<std::pair<int, int> >& render_views) OVERRIDE; 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual content::QuotaPermissionContext* 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CreateQuotaPermissionContext() OVERRIDE; 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void AllowCertificateError( 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_process_id, 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_view_id, 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int cert_error, 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const net::SSLInfo& ssl_info, 100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& request_url, 101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ResourceType::Type resource_type, 102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bool overridable, 103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bool strict_enforcement, 104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const base::Callback<void(bool)>& callback, 105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::CertificateRequestResultType* result) OVERRIDE; 106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void SelectClientCertificate( 107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_process_id, 108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_view_id, 109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const net::HttpNetworkSession* network_session, 110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown net::SSLCertRequestInfo* cert_request_info, 111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const base::Callback<void(net::X509Certificate*)>& callback) OVERRIDE; 112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual blink::WebNotificationPresenter::Permission 113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CheckDesktopNotificationPermission( 114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& source_url, 115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ResourceContext* context, 116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_process_id) OVERRIDE; 117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng virtual void ShowDesktopNotification( 118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const content::ShowDesktopNotificationHostMsgParams& params, 119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_process_id, 120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_view_id, 121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bool worker) OVERRIDE; 122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void CancelDesktopNotification( 123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_process_id, 124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_view_id, 125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int notification_id) OVERRIDE; 126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool CanCreateWindow(const GURL& opener_url, 127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& opener_top_level_frame_url, 128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& source_origin, 129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown WindowContainerType container_type, 130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& target_url, 131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const content::Referrer& referrer, 132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown WindowOpenDisposition disposition, 133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const blink::WebWindowFeatures& features, 134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bool user_gesture, 135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bool opener_suppressed, 136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ResourceContext* context, 137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int render_process_id, 138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bool is_guest, 139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int opener_id, 140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bool* no_javascript_access) OVERRIDE; 141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual std::string GetWorkerProcessTitle( 142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& url, 143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::ResourceContext* context) OVERRIDE; 144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void ResourceDispatcherHostCreated() OVERRIDE; 145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual net::NetLog* GetNetLog() OVERRIDE; 146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual content::AccessTokenStore* CreateAccessTokenStore() OVERRIDE; 147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool IsFastShutdownPossible() OVERRIDE; 148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void UpdateInspectorSetting(content::RenderViewHost* rvh, 149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const std::string& key, 150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const std::string& value) OVERRIDE; 151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void ClearCache(content::RenderViewHost* rvh) OVERRIDE; 152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void ClearCookies(content::RenderViewHost* rvh) OVERRIDE; 153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual base::FilePath GetDefaultDownloadDirectory() OVERRIDE; 154663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng virtual std::string GetDefaultDownloadName() OVERRIDE; 155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void DidCreatePpapiPlugin( 156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::BrowserPpapiHost* browser_host) OVERRIDE; 157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool AllowPepperSocketAPI( 158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown content::BrowserContext* browser_context, 159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& url, 160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bool private_api, 161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const content::SocketPermissionRequest* params) OVERRIDE; 162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void OverrideWebkitPrefs(content::RenderViewHost* rvh, 163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const GURL& url, 164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown WebPreferences* web_prefs) OVERRIDE; 165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown private: 167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Android WebView currently has a single global (non-off-the-record) browser 168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // context. 169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<AwBrowserContext> browser_context_; 170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<AwWebPreferencesPopulater> preferences_populater_; 171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown JniDependencyFactory* native_factory_; 173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown DISALLOW_COPY_AND_ASSIGN(AwContentBrowserClient); 175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} // namespace android_webview 178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // ANDROID_WEBVIEW_LIB_AW_CONTENT_BROWSER_CLIENT_H_ 180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown