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