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