Home | History | Annotate | Download | only in webview
      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