1 // Copyright (c) 2013 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 CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_ 7 8 #include "chrome/browser/extensions/api/capture_web_contents_function.h" 9 #include "chrome/browser/extensions/api/execute_code_function.h" 10 #include "chrome/browser/guest_view/web_view/web_view_find_helper.h" 11 #include "chrome/browser/guest_view/web_view/web_view_guest.h" 12 13 // WARNING: Webview could be loaded in an unblessed context, thus any new 14 // APIs must extend WebviewExtensionFunction/WebviewExecuteCodeFunction which 15 // do a process ID check to prevent abuse by normal renderer processes. 16 // TODO(guohui): refactor WebviewExecuteCodeFunction to also extend 17 // WebviewExtensionFunction. 18 namespace extensions { 19 20 // An abstract base class for async webview APIs. It does a process ID check 21 // in RunAsync, and then calls RunAsyncSafe which must be overriden by all 22 // subclasses. 23 class WebviewExtensionFunction : public AsyncExtensionFunction { 24 public: 25 WebviewExtensionFunction() {} 26 27 protected: 28 virtual ~WebviewExtensionFunction() {} 29 30 // ExtensionFunction implementation. 31 virtual bool RunAsync() OVERRIDE FINAL; 32 33 private: 34 virtual bool RunAsyncSafe(WebViewGuest* guest) = 0; 35 }; 36 37 class WebviewContextMenusCreateFunction : public AsyncExtensionFunction { 38 public: 39 DECLARE_EXTENSION_FUNCTION("webview.contextMenusCreate", 40 WEBVIEW_CONTEXTMENUSCREATE); 41 WebviewContextMenusCreateFunction() {} 42 43 protected: 44 virtual ~WebviewContextMenusCreateFunction() {} 45 46 // ExtensionFunction implementation. 47 virtual bool RunAsync() OVERRIDE; 48 49 private: 50 DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusCreateFunction); 51 }; 52 53 class WebviewContextMenusUpdateFunction : public AsyncExtensionFunction { 54 public: 55 DECLARE_EXTENSION_FUNCTION("webview.contextMenusUpdate", 56 WEBVIEW_CONTEXTMENUSUPDATE); 57 WebviewContextMenusUpdateFunction() {} 58 59 protected: 60 virtual ~WebviewContextMenusUpdateFunction() {} 61 62 // ExtensionFunction implementation. 63 virtual bool RunAsync() OVERRIDE; 64 65 private: 66 DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusUpdateFunction); 67 }; 68 69 class WebviewContextMenusRemoveFunction : public AsyncExtensionFunction { 70 public: 71 DECLARE_EXTENSION_FUNCTION("webview.contextMenusRemove", 72 WEBVIEW_CONTEXTMENUSREMOVE); 73 WebviewContextMenusRemoveFunction() {} 74 75 protected: 76 virtual ~WebviewContextMenusRemoveFunction() {} 77 78 // ExtensionFunction implementation. 79 virtual bool RunAsync() OVERRIDE; 80 81 private: 82 DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusRemoveFunction); 83 }; 84 85 class WebviewContextMenusRemoveAllFunction : public AsyncExtensionFunction { 86 public: 87 DECLARE_EXTENSION_FUNCTION("webview.contextMenusRemoveAll", 88 WEBVIEW_CONTEXTMENUSREMOVEALL); 89 WebviewContextMenusRemoveAllFunction() {} 90 91 protected: 92 virtual ~WebviewContextMenusRemoveAllFunction() {} 93 94 // ExtensionFunction implementation. 95 virtual bool RunAsync() OVERRIDE; 96 97 private: 98 DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusRemoveAllFunction); 99 }; 100 101 class WebviewNavigateFunction : public WebviewExtensionFunction { 102 public: 103 DECLARE_EXTENSION_FUNCTION("webview.navigate", WEBVIEW_NAVIGATE); 104 WebviewNavigateFunction() {} 105 106 protected: 107 virtual ~WebviewNavigateFunction() {} 108 109 private: 110 // WebviewExtensionFunction implementation. 111 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 112 113 DISALLOW_COPY_AND_ASSIGN(WebviewNavigateFunction); 114 }; 115 116 class WebviewClearDataFunction : public WebviewExtensionFunction { 117 public: 118 DECLARE_EXTENSION_FUNCTION("webview.clearData", WEBVIEW_CLEARDATA); 119 120 WebviewClearDataFunction(); 121 122 protected: 123 virtual ~WebviewClearDataFunction(); 124 125 private: 126 // WebviewExtensionFunction implementation. 127 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 128 129 uint32 GetRemovalMask(); 130 void ClearDataDone(); 131 132 // Removal start time. 133 base::Time remove_since_; 134 // Removal mask, corresponds to StoragePartition::RemoveDataMask enum. 135 uint32 remove_mask_; 136 // Tracks any data related or parse errors. 137 bool bad_message_; 138 139 DISALLOW_COPY_AND_ASSIGN(WebviewClearDataFunction); 140 }; 141 142 class WebviewExecuteCodeFunction : public extensions::ExecuteCodeFunction { 143 public: 144 WebviewExecuteCodeFunction(); 145 146 protected: 147 virtual ~WebviewExecuteCodeFunction(); 148 149 // Initialize |details_| if it hasn't already been. 150 virtual bool Init() OVERRIDE; 151 virtual bool ShouldInsertCSS() const OVERRIDE; 152 virtual bool CanExecuteScriptOnPage() OVERRIDE; 153 // Guarded by a process ID check. 154 virtual extensions::ScriptExecutor* GetScriptExecutor() OVERRIDE FINAL; 155 virtual bool IsWebView() const OVERRIDE; 156 virtual const GURL& GetWebViewSrc() const OVERRIDE; 157 158 private: 159 // Contains extension resource built from path of file which is 160 // specified in JSON arguments. 161 extensions::ExtensionResource resource_; 162 163 int guest_instance_id_; 164 165 GURL guest_src_; 166 167 DISALLOW_COPY_AND_ASSIGN(WebviewExecuteCodeFunction); 168 }; 169 170 class WebviewExecuteScriptFunction : public WebviewExecuteCodeFunction { 171 public: 172 WebviewExecuteScriptFunction(); 173 174 protected: 175 virtual ~WebviewExecuteScriptFunction() {} 176 177 virtual void OnExecuteCodeFinished(const std::string& error, 178 int32 on_page_id, 179 const GURL& on_url, 180 const base::ListValue& result) OVERRIDE; 181 182 DECLARE_EXTENSION_FUNCTION("webview.executeScript", WEBVIEW_EXECUTESCRIPT) 183 184 private: 185 DISALLOW_COPY_AND_ASSIGN(WebviewExecuteScriptFunction); 186 }; 187 188 class WebviewInsertCSSFunction : public WebviewExecuteCodeFunction { 189 public: 190 WebviewInsertCSSFunction(); 191 192 protected: 193 virtual ~WebviewInsertCSSFunction() {} 194 195 virtual bool ShouldInsertCSS() const OVERRIDE; 196 197 DECLARE_EXTENSION_FUNCTION("webview.insertCSS", WEBVIEW_INSERTCSS) 198 199 private: 200 DISALLOW_COPY_AND_ASSIGN(WebviewInsertCSSFunction); 201 }; 202 203 class WebviewCaptureVisibleRegionFunction 204 : public extensions::CaptureWebContentsFunction { 205 DECLARE_EXTENSION_FUNCTION("webview.captureVisibleRegion", 206 WEBVIEW_CAPTUREVISIBLEREGION); 207 208 WebviewCaptureVisibleRegionFunction(); 209 210 protected: 211 virtual ~WebviewCaptureVisibleRegionFunction(); 212 213 private: 214 // extensions::CaptureWebContentsFunction implementation. 215 virtual bool IsScreenshotEnabled() OVERRIDE; 216 virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE; 217 virtual void OnCaptureFailure(FailureReason reason) OVERRIDE; 218 219 DISALLOW_COPY_AND_ASSIGN(WebviewCaptureVisibleRegionFunction); 220 }; 221 222 class WebviewSetNameFunction : public WebviewExtensionFunction { 223 public: 224 DECLARE_EXTENSION_FUNCTION("webview.setName", WEBVIEW_SETNAME); 225 226 WebviewSetNameFunction(); 227 228 protected: 229 virtual ~WebviewSetNameFunction(); 230 231 private: 232 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 233 234 DISALLOW_COPY_AND_ASSIGN(WebviewSetNameFunction); 235 }; 236 237 class WebviewSetZoomFunction : public WebviewExtensionFunction { 238 public: 239 DECLARE_EXTENSION_FUNCTION("webview.setZoom", WEBVIEW_SETZOOM); 240 241 WebviewSetZoomFunction(); 242 243 protected: 244 virtual ~WebviewSetZoomFunction(); 245 246 private: 247 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 248 249 DISALLOW_COPY_AND_ASSIGN(WebviewSetZoomFunction); 250 }; 251 252 class WebviewGetZoomFunction : public WebviewExtensionFunction { 253 public: 254 DECLARE_EXTENSION_FUNCTION("webview.getZoom", WEBVIEW_GETZOOM); 255 256 WebviewGetZoomFunction(); 257 258 protected: 259 virtual ~WebviewGetZoomFunction(); 260 261 private: 262 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 263 264 DISALLOW_COPY_AND_ASSIGN(WebviewGetZoomFunction); 265 }; 266 267 class WebviewFindFunction : public WebviewExtensionFunction { 268 public: 269 DECLARE_EXTENSION_FUNCTION("webview.find", WEBVIEW_FIND); 270 271 WebviewFindFunction(); 272 273 // Exposes SendResponse() for use by WebviewFindHelper. 274 using WebviewExtensionFunction::SendResponse; 275 276 protected: 277 virtual ~WebviewFindFunction(); 278 279 private: 280 // WebviewExtensionFunction implementation. 281 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 282 283 DISALLOW_COPY_AND_ASSIGN(WebviewFindFunction); 284 }; 285 286 class WebviewStopFindingFunction : public WebviewExtensionFunction { 287 public: 288 DECLARE_EXTENSION_FUNCTION("webview.stopFinding", WEBVIEW_STOPFINDING); 289 290 WebviewStopFindingFunction(); 291 292 protected: 293 virtual ~WebviewStopFindingFunction(); 294 295 private: 296 // WebviewExtensionFunction implementation. 297 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 298 299 DISALLOW_COPY_AND_ASSIGN(WebviewStopFindingFunction); 300 }; 301 302 class WebviewGoFunction : public WebviewExtensionFunction { 303 public: 304 DECLARE_EXTENSION_FUNCTION("webview.go", WEBVIEW_GO); 305 306 WebviewGoFunction(); 307 308 protected: 309 virtual ~WebviewGoFunction(); 310 311 private: 312 // WebviewExtensionFunction implementation. 313 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 314 315 DISALLOW_COPY_AND_ASSIGN(WebviewGoFunction); 316 }; 317 318 class WebviewReloadFunction : public WebviewExtensionFunction { 319 public: 320 DECLARE_EXTENSION_FUNCTION("webview.reload", WEBVIEW_RELOAD); 321 322 WebviewReloadFunction(); 323 324 protected: 325 virtual ~WebviewReloadFunction(); 326 327 private: 328 // WebviewExtensionFunction implementation. 329 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 330 331 DISALLOW_COPY_AND_ASSIGN(WebviewReloadFunction); 332 }; 333 334 class WebviewSetPermissionFunction : public WebviewExtensionFunction { 335 public: 336 DECLARE_EXTENSION_FUNCTION("webview.setPermission", WEBVIEW_SETPERMISSION); 337 338 WebviewSetPermissionFunction(); 339 340 protected: 341 virtual ~WebviewSetPermissionFunction(); 342 343 private: 344 // WebviewExtensionFunction implementation. 345 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 346 347 DISALLOW_COPY_AND_ASSIGN(WebviewSetPermissionFunction); 348 }; 349 350 class WebviewShowContextMenuFunction : public WebviewExtensionFunction { 351 public: 352 DECLARE_EXTENSION_FUNCTION("webview.showContextMenu", 353 WEBVIEW_SHOWCONTEXTMENU); 354 355 WebviewShowContextMenuFunction(); 356 357 protected: 358 virtual ~WebviewShowContextMenuFunction(); 359 360 private: 361 // WebviewExtensionFunction implementation. 362 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 363 364 DISALLOW_COPY_AND_ASSIGN(WebviewShowContextMenuFunction); 365 }; 366 367 class WebviewOverrideUserAgentFunction: public WebviewExtensionFunction { 368 public: 369 DECLARE_EXTENSION_FUNCTION("webview.overrideUserAgent", 370 WEBVIEW_OVERRIDEUSERAGENT); 371 372 WebviewOverrideUserAgentFunction(); 373 374 protected: 375 virtual ~WebviewOverrideUserAgentFunction(); 376 377 private: 378 // WebviewExtensionFunction implementation. 379 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 380 381 DISALLOW_COPY_AND_ASSIGN(WebviewOverrideUserAgentFunction); 382 }; 383 384 class WebviewStopFunction : public WebviewExtensionFunction { 385 public: 386 DECLARE_EXTENSION_FUNCTION("webview.stop", WEBVIEW_STOP); 387 388 WebviewStopFunction(); 389 390 protected: 391 virtual ~WebviewStopFunction(); 392 393 private: 394 // WebviewExtensionFunction implementation. 395 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 396 397 DISALLOW_COPY_AND_ASSIGN(WebviewStopFunction); 398 }; 399 400 class WebviewTerminateFunction : public WebviewExtensionFunction { 401 public: 402 DECLARE_EXTENSION_FUNCTION("webview.terminate", WEBVIEW_TERMINATE); 403 404 WebviewTerminateFunction(); 405 406 protected: 407 virtual ~WebviewTerminateFunction(); 408 409 private: 410 // WebviewExtensionFunction implementation. 411 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE; 412 413 DISALLOW_COPY_AND_ASSIGN(WebviewTerminateFunction); 414 }; 415 416 } // namespace extensions 417 418 #endif // CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_ 419