1 // Copyright 2014 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 EXTENSIONS_BROWSER_API_WEB_VIEW_WEB_VIEW_INTERNAL_API_H_ 6 #define EXTENSIONS_BROWSER_API_WEB_VIEW_WEB_VIEW_INTERNAL_API_H_ 7 8 #include "extensions/browser/api/capture_web_contents_function.h" 9 #include "extensions/browser/api/execute_code_function.h" 10 #include "extensions/browser/extension_function.h" 11 #include "extensions/browser/guest_view/web_view/web_view_guest.h" 12 13 // WARNING: WebViewInternal could be loaded in an unblessed context, thus any 14 // new APIs must extend WebViewInternalExtensionFunction or 15 // WebViewInternalExecuteCodeFunction which do a process ID check to prevent 16 // abuse by normal renderer processes. 17 namespace extensions { 18 19 // An abstract base class for async webview APIs. It does a process ID check 20 // in RunAsync, and then calls RunAsyncSafe which must be overriden by all 21 // subclasses. 22 class WebViewInternalExtensionFunction : public AsyncExtensionFunction { 23 public: 24 WebViewInternalExtensionFunction() {} 25 26 protected: 27 virtual ~WebViewInternalExtensionFunction() {} 28 29 // ExtensionFunction implementation. 30 virtual bool RunAsync() OVERRIDE FINAL; 31 32 private: 33 virtual bool RunAsyncSafe(WebViewGuest* guest) = 0; 34 }; 35 36 class WebViewInternalNavigateFunction 37 : public WebViewInternalExtensionFunction { 38 public: 39 DECLARE_EXTENSION_FUNCTION("webViewInternal.navigate", 40 WEBVIEWINTERNAL_NAVIGATE); 41 WebViewInternalNavigateFunction() {} 42 43 protected: 44 virtual ~WebViewInternalNavigateFunction() {} 45 46 private: 47 // WebViewInternalExtensionFunction implementation. 48 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 49 50 DISALLOW_COPY_AND_ASSIGN(WebViewInternalNavigateFunction); 51 }; 52 53 class WebViewInternalExecuteCodeFunction 54 : public extensions::ExecuteCodeFunction { 55 public: 56 WebViewInternalExecuteCodeFunction(); 57 58 protected: 59 virtual ~WebViewInternalExecuteCodeFunction(); 60 61 // Initialize |details_| if it hasn't already been. 62 virtual bool Init() OVERRIDE; 63 virtual bool ShouldInsertCSS() const OVERRIDE; 64 virtual bool CanExecuteScriptOnPage() OVERRIDE; 65 // Guarded by a process ID check. 66 virtual extensions::ScriptExecutor* GetScriptExecutor() OVERRIDE FINAL; 67 virtual bool IsWebView() const OVERRIDE; 68 virtual const GURL& GetWebViewSrc() const OVERRIDE; 69 70 private: 71 // Contains extension resource built from path of file which is 72 // specified in JSON arguments. 73 extensions::ExtensionResource resource_; 74 75 int guest_instance_id_; 76 77 GURL guest_src_; 78 79 DISALLOW_COPY_AND_ASSIGN(WebViewInternalExecuteCodeFunction); 80 }; 81 82 class WebViewInternalExecuteScriptFunction 83 : public WebViewInternalExecuteCodeFunction { 84 public: 85 WebViewInternalExecuteScriptFunction(); 86 87 protected: 88 virtual ~WebViewInternalExecuteScriptFunction() {} 89 90 virtual void OnExecuteCodeFinished(const std::string& error, 91 const GURL& on_url, 92 const base::ListValue& result) OVERRIDE; 93 94 DECLARE_EXTENSION_FUNCTION("webViewInternal.executeScript", 95 WEBVIEWINTERNAL_EXECUTESCRIPT) 96 97 private: 98 DISALLOW_COPY_AND_ASSIGN(WebViewInternalExecuteScriptFunction); 99 }; 100 101 class WebViewInternalInsertCSSFunction 102 : public WebViewInternalExecuteCodeFunction { 103 public: 104 WebViewInternalInsertCSSFunction(); 105 106 protected: 107 virtual ~WebViewInternalInsertCSSFunction() {} 108 109 virtual bool ShouldInsertCSS() const OVERRIDE; 110 111 DECLARE_EXTENSION_FUNCTION("webViewInternal.insertCSS", 112 WEBVIEWINTERNAL_INSERTCSS) 113 114 private: 115 DISALLOW_COPY_AND_ASSIGN(WebViewInternalInsertCSSFunction); 116 }; 117 118 class WebViewInternalCaptureVisibleRegionFunction 119 : public extensions::CaptureWebContentsFunction { 120 DECLARE_EXTENSION_FUNCTION("webViewInternal.captureVisibleRegion", 121 WEBVIEWINTERNAL_CAPTUREVISIBLEREGION); 122 123 WebViewInternalCaptureVisibleRegionFunction(); 124 125 protected: 126 virtual ~WebViewInternalCaptureVisibleRegionFunction(); 127 128 private: 129 // extensions::CaptureWebContentsFunction implementation. 130 virtual bool IsScreenshotEnabled() OVERRIDE; 131 virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE; 132 virtual void OnCaptureFailure(FailureReason reason) OVERRIDE; 133 134 DISALLOW_COPY_AND_ASSIGN(WebViewInternalCaptureVisibleRegionFunction); 135 }; 136 137 class WebViewInternalSetNameFunction : public WebViewInternalExtensionFunction { 138 public: 139 DECLARE_EXTENSION_FUNCTION("webViewInternal.setName", 140 WEBVIEWINTERNAL_SETNAME); 141 142 WebViewInternalSetNameFunction(); 143 144 protected: 145 virtual ~WebViewInternalSetNameFunction(); 146 147 private: 148 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 149 150 DISALLOW_COPY_AND_ASSIGN(WebViewInternalSetNameFunction); 151 }; 152 153 class WebViewInternalSetAllowTransparencyFunction : 154 public WebViewInternalExtensionFunction { 155 public: 156 DECLARE_EXTENSION_FUNCTION("webViewInternal.setAllowTransparency", 157 WEBVIEWINTERNAL_SETALLOWTRANSPARENCY); 158 159 WebViewInternalSetAllowTransparencyFunction(); 160 161 protected: 162 virtual ~WebViewInternalSetAllowTransparencyFunction(); 163 164 private: 165 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 166 167 DISALLOW_COPY_AND_ASSIGN(WebViewInternalSetAllowTransparencyFunction); 168 }; 169 170 class WebViewInternalSetZoomFunction : public WebViewInternalExtensionFunction { 171 public: 172 DECLARE_EXTENSION_FUNCTION("webViewInternal.setZoom", 173 WEBVIEWINTERNAL_SETZOOM); 174 175 WebViewInternalSetZoomFunction(); 176 177 protected: 178 virtual ~WebViewInternalSetZoomFunction(); 179 180 private: 181 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 182 183 DISALLOW_COPY_AND_ASSIGN(WebViewInternalSetZoomFunction); 184 }; 185 186 class WebViewInternalGetZoomFunction : public WebViewInternalExtensionFunction { 187 public: 188 DECLARE_EXTENSION_FUNCTION("webViewInternal.getZoom", 189 WEBVIEWINTERNAL_GETZOOM); 190 191 WebViewInternalGetZoomFunction(); 192 193 protected: 194 virtual ~WebViewInternalGetZoomFunction(); 195 196 private: 197 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 198 199 DISALLOW_COPY_AND_ASSIGN(WebViewInternalGetZoomFunction); 200 }; 201 202 class WebViewInternalFindFunction : public WebViewInternalExtensionFunction { 203 public: 204 DECLARE_EXTENSION_FUNCTION("webViewInternal.find", WEBVIEWINTERNAL_FIND); 205 206 WebViewInternalFindFunction(); 207 208 // Exposes SendResponse() for use by WebViewInternalFindHelper. 209 using WebViewInternalExtensionFunction::SendResponse; 210 211 protected: 212 virtual ~WebViewInternalFindFunction(); 213 214 private: 215 // WebViewInternalExtensionFunction implementation. 216 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 217 218 DISALLOW_COPY_AND_ASSIGN(WebViewInternalFindFunction); 219 }; 220 221 class WebViewInternalStopFindingFunction 222 : public WebViewInternalExtensionFunction { 223 public: 224 DECLARE_EXTENSION_FUNCTION("webViewInternal.stopFinding", 225 WEBVIEWINTERNAL_STOPFINDING); 226 227 WebViewInternalStopFindingFunction(); 228 229 protected: 230 virtual ~WebViewInternalStopFindingFunction(); 231 232 private: 233 // WebViewInternalExtensionFunction implementation. 234 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 235 236 DISALLOW_COPY_AND_ASSIGN(WebViewInternalStopFindingFunction); 237 }; 238 239 class WebViewInternalGoFunction : public WebViewInternalExtensionFunction { 240 public: 241 DECLARE_EXTENSION_FUNCTION("webViewInternal.go", WEBVIEWINTERNAL_GO); 242 243 WebViewInternalGoFunction(); 244 245 protected: 246 virtual ~WebViewInternalGoFunction(); 247 248 private: 249 // WebViewInternalExtensionFunction implementation. 250 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 251 252 DISALLOW_COPY_AND_ASSIGN(WebViewInternalGoFunction); 253 }; 254 255 class WebViewInternalReloadFunction : public WebViewInternalExtensionFunction { 256 public: 257 DECLARE_EXTENSION_FUNCTION("webViewInternal.reload", WEBVIEWINTERNAL_RELOAD); 258 259 WebViewInternalReloadFunction(); 260 261 protected: 262 virtual ~WebViewInternalReloadFunction(); 263 264 private: 265 // WebViewInternalExtensionFunction implementation. 266 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 267 268 DISALLOW_COPY_AND_ASSIGN(WebViewInternalReloadFunction); 269 }; 270 271 class WebViewInternalSetPermissionFunction 272 : public WebViewInternalExtensionFunction { 273 public: 274 DECLARE_EXTENSION_FUNCTION("webViewInternal.setPermission", 275 WEBVIEWINTERNAL_SETPERMISSION); 276 277 WebViewInternalSetPermissionFunction(); 278 279 protected: 280 virtual ~WebViewInternalSetPermissionFunction(); 281 282 private: 283 // WebViewInternalExtensionFunction implementation. 284 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 285 286 DISALLOW_COPY_AND_ASSIGN(WebViewInternalSetPermissionFunction); 287 }; 288 289 class WebViewInternalOverrideUserAgentFunction 290 : public WebViewInternalExtensionFunction { 291 public: 292 DECLARE_EXTENSION_FUNCTION("webViewInternal.overrideUserAgent", 293 WEBVIEWINTERNAL_OVERRIDEUSERAGENT); 294 295 WebViewInternalOverrideUserAgentFunction(); 296 297 protected: 298 virtual ~WebViewInternalOverrideUserAgentFunction(); 299 300 private: 301 // WebViewInternalExtensionFunction implementation. 302 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 303 304 DISALLOW_COPY_AND_ASSIGN(WebViewInternalOverrideUserAgentFunction); 305 }; 306 307 class WebViewInternalStopFunction : public WebViewInternalExtensionFunction { 308 public: 309 DECLARE_EXTENSION_FUNCTION("webViewInternal.stop", WEBVIEWINTERNAL_STOP); 310 311 WebViewInternalStopFunction(); 312 313 protected: 314 virtual ~WebViewInternalStopFunction(); 315 316 private: 317 // WebViewInternalExtensionFunction implementation. 318 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 319 320 DISALLOW_COPY_AND_ASSIGN(WebViewInternalStopFunction); 321 }; 322 323 class WebViewInternalTerminateFunction 324 : public WebViewInternalExtensionFunction { 325 public: 326 DECLARE_EXTENSION_FUNCTION("webViewInternal.terminate", 327 WEBVIEWINTERNAL_TERMINATE); 328 329 WebViewInternalTerminateFunction(); 330 331 protected: 332 virtual ~WebViewInternalTerminateFunction(); 333 334 private: 335 // WebViewInternalExtensionFunction implementation. 336 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 337 338 DISALLOW_COPY_AND_ASSIGN(WebViewInternalTerminateFunction); 339 }; 340 341 class WebViewInternalClearDataFunction 342 : public WebViewInternalExtensionFunction { 343 public: 344 DECLARE_EXTENSION_FUNCTION("webViewInternal.clearData", 345 WEBVIEWINTERNAL_CLEARDATA); 346 347 WebViewInternalClearDataFunction(); 348 349 protected: 350 virtual ~WebViewInternalClearDataFunction(); 351 352 private: 353 // WebViewInternalExtensionFunction implementation. 354 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 355 356 uint32 GetRemovalMask(); 357 void ClearDataDone(); 358 359 // Removal start time. 360 base::Time remove_since_; 361 // Removal mask, corresponds to StoragePartition::RemoveDataMask enum. 362 uint32 remove_mask_; 363 // Tracks any data related or parse errors. 364 bool bad_message_; 365 366 DISALLOW_COPY_AND_ASSIGN(WebViewInternalClearDataFunction); 367 }; 368 369 } // namespace extensions 370 371 #endif // CHROME_BROWSER_EXTENSIONS_API_WEB_VIEW_WEB_VIEW_INTERNAL_API_H_ 372