blob: 4cf3e84ce40834b68d4a7274acdd6a786b7f5053 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_API_WEB_VIEW_WEB_VIEW_INTERNAL_API_H_
#define CHROME_BROWSER_EXTENSIONS_API_WEB_VIEW_WEB_VIEW_INTERNAL_API_H_
#include "chrome/browser/extensions/api/capture_web_contents_function.h"
#include "chrome/browser/extensions/api/execute_code_function.h"
#include "chrome/browser/guest_view/web_view/web_view_find_helper.h"
#include "chrome/browser/guest_view/web_view/web_view_guest.h"
// WARNING: WebViewInternal could be loaded in an unblessed context, thus any
// new APIs must extend WebViewInternalExtensionFunction or
// WebViewInternalExecuteCodeFunction which do a process ID check to prevent
// abuse by normal renderer processes.
// TODO(guohui): refactor WebViewInternalExecuteCodeFunction to also extend
// WebViewInternalExtensionFunction.
namespace extensions {
// An abstract base class for async webview APIs. It does a process ID check
// in RunAsync, and then calls RunAsyncSafe which must be overriden by all
// subclasses.
class WebViewInternalExtensionFunction : public AsyncExtensionFunction {
public:
WebViewInternalExtensionFunction() {}
protected:
virtual ~WebViewInternalExtensionFunction() {}
// ExtensionFunction implementation.
virtual bool RunAsync() OVERRIDE FINAL;
private:
virtual bool RunAsyncSafe(WebViewGuest* guest) = 0;
};
class WebViewInternalContextMenusCreateFunction
: public AsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.contextMenusCreate",
WEBVIEWINTERNAL_CONTEXTMENUSCREATE);
WebViewInternalContextMenusCreateFunction() {}
protected:
virtual ~WebViewInternalContextMenusCreateFunction() {}
// ExtensionFunction implementation.
virtual bool RunAsync() OVERRIDE;
private:
DISALLOW_COPY_AND_ASSIGN(WebViewInternalContextMenusCreateFunction);
};
class WebViewInternalContextMenusUpdateFunction
: public AsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.contextMenusUpdate",
WEBVIEWINTERNAL_CONTEXTMENUSUPDATE);
WebViewInternalContextMenusUpdateFunction() {}
protected:
virtual ~WebViewInternalContextMenusUpdateFunction() {}
// ExtensionFunction implementation.
virtual bool RunAsync() OVERRIDE;
private:
DISALLOW_COPY_AND_ASSIGN(WebViewInternalContextMenusUpdateFunction);
};
class WebViewInternalContextMenusRemoveFunction
: public AsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.contextMenusRemove",
WEBVIEWINTERNAL_CONTEXTMENUSREMOVE);
WebViewInternalContextMenusRemoveFunction() {}
protected:
virtual ~WebViewInternalContextMenusRemoveFunction() {}
// ExtensionFunction implementation.
virtual bool RunAsync() OVERRIDE;
private:
DISALLOW_COPY_AND_ASSIGN(WebViewInternalContextMenusRemoveFunction);
};
class WebViewInternalContextMenusRemoveAllFunction
: public AsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.contextMenusRemoveAll",
WEBVIEWINTERNAL_CONTEXTMENUSREMOVEALL);
WebViewInternalContextMenusRemoveAllFunction() {}
protected:
virtual ~WebViewInternalContextMenusRemoveAllFunction() {}
// ExtensionFunction implementation.
virtual bool RunAsync() OVERRIDE;
private:
DISALLOW_COPY_AND_ASSIGN(WebViewInternalContextMenusRemoveAllFunction);
};
class WebViewInternalNavigateFunction
: public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.navigate",
WEBVIEWINTERNAL_NAVIGATE);
WebViewInternalNavigateFunction() {}
protected:
virtual ~WebViewInternalNavigateFunction() {}
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalNavigateFunction);
};
class WebViewInternalClearDataFunction
: public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.clearData",
WEBVIEWINTERNAL_CLEARDATA);
WebViewInternalClearDataFunction();
protected:
virtual ~WebViewInternalClearDataFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
uint32 GetRemovalMask();
void ClearDataDone();
// Removal start time.
base::Time remove_since_;
// Removal mask, corresponds to StoragePartition::RemoveDataMask enum.
uint32 remove_mask_;
// Tracks any data related or parse errors.
bool bad_message_;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalClearDataFunction);
};
class WebViewInternalExecuteCodeFunction
: public extensions::ExecuteCodeFunction {
public:
WebViewInternalExecuteCodeFunction();
protected:
virtual ~WebViewInternalExecuteCodeFunction();
// Initialize |details_| if it hasn't already been.
virtual bool Init() OVERRIDE;
virtual bool ShouldInsertCSS() const OVERRIDE;
virtual bool CanExecuteScriptOnPage() OVERRIDE;
// Guarded by a process ID check.
virtual extensions::ScriptExecutor* GetScriptExecutor() OVERRIDE FINAL;
virtual bool IsWebView() const OVERRIDE;
virtual const GURL& GetWebViewSrc() const OVERRIDE;
private:
// Contains extension resource built from path of file which is
// specified in JSON arguments.
extensions::ExtensionResource resource_;
int guest_instance_id_;
GURL guest_src_;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalExecuteCodeFunction);
};
class WebViewInternalExecuteScriptFunction
: public WebViewInternalExecuteCodeFunction {
public:
WebViewInternalExecuteScriptFunction();
protected:
virtual ~WebViewInternalExecuteScriptFunction() {}
virtual void OnExecuteCodeFinished(const std::string& error,
const GURL& on_url,
const base::ListValue& result) OVERRIDE;
DECLARE_EXTENSION_FUNCTION("webViewInternal.executeScript",
WEBVIEWINTERNAL_EXECUTESCRIPT)
private:
DISALLOW_COPY_AND_ASSIGN(WebViewInternalExecuteScriptFunction);
};
class WebViewInternalInsertCSSFunction
: public WebViewInternalExecuteCodeFunction {
public:
WebViewInternalInsertCSSFunction();
protected:
virtual ~WebViewInternalInsertCSSFunction() {}
virtual bool ShouldInsertCSS() const OVERRIDE;
DECLARE_EXTENSION_FUNCTION("webViewInternal.insertCSS",
WEBVIEWINTERNAL_INSERTCSS)
private:
DISALLOW_COPY_AND_ASSIGN(WebViewInternalInsertCSSFunction);
};
class WebViewInternalCaptureVisibleRegionFunction
: public extensions::CaptureWebContentsFunction {
DECLARE_EXTENSION_FUNCTION("webViewInternal.captureVisibleRegion",
WEBVIEWINTERNAL_CAPTUREVISIBLEREGION);
WebViewInternalCaptureVisibleRegionFunction();
protected:
virtual ~WebViewInternalCaptureVisibleRegionFunction();
private:
// extensions::CaptureWebContentsFunction implementation.
virtual bool IsScreenshotEnabled() OVERRIDE;
virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE;
virtual void OnCaptureFailure(FailureReason reason) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalCaptureVisibleRegionFunction);
};
class WebViewInternalSetNameFunction : public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.setName",
WEBVIEWINTERNAL_SETNAME);
WebViewInternalSetNameFunction();
protected:
virtual ~WebViewInternalSetNameFunction();
private:
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalSetNameFunction);
};
class WebViewInternalSetZoomFunction : public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.setZoom",
WEBVIEWINTERNAL_SETZOOM);
WebViewInternalSetZoomFunction();
protected:
virtual ~WebViewInternalSetZoomFunction();
private:
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalSetZoomFunction);
};
class WebViewInternalGetZoomFunction : public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.getZoom",
WEBVIEWINTERNAL_GETZOOM);
WebViewInternalGetZoomFunction();
protected:
virtual ~WebViewInternalGetZoomFunction();
private:
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalGetZoomFunction);
};
class WebViewInternalFindFunction : public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.find", WEBVIEWINTERNAL_FIND);
WebViewInternalFindFunction();
// Exposes SendResponse() for use by WebViewInternalFindHelper.
using WebViewInternalExtensionFunction::SendResponse;
protected:
virtual ~WebViewInternalFindFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalFindFunction);
};
class WebViewInternalStopFindingFunction
: public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.stopFinding",
WEBVIEWINTERNAL_STOPFINDING);
WebViewInternalStopFindingFunction();
protected:
virtual ~WebViewInternalStopFindingFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalStopFindingFunction);
};
class WebViewInternalGoFunction : public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.go", WEBVIEWINTERNAL_GO);
WebViewInternalGoFunction();
protected:
virtual ~WebViewInternalGoFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalGoFunction);
};
class WebViewInternalReloadFunction : public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.reload", WEBVIEWINTERNAL_RELOAD);
WebViewInternalReloadFunction();
protected:
virtual ~WebViewInternalReloadFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalReloadFunction);
};
class WebViewInternalSetPermissionFunction
: public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.setPermission",
WEBVIEWINTERNAL_SETPERMISSION);
WebViewInternalSetPermissionFunction();
protected:
virtual ~WebViewInternalSetPermissionFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalSetPermissionFunction);
};
class WebViewInternalShowContextMenuFunction
: public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.showContextMenu",
WEBVIEWINTERNAL_SHOWCONTEXTMENU);
WebViewInternalShowContextMenuFunction();
protected:
virtual ~WebViewInternalShowContextMenuFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalShowContextMenuFunction);
};
class WebViewInternalOverrideUserAgentFunction
: public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.overrideUserAgent",
WEBVIEWINTERNAL_OVERRIDEUSERAGENT);
WebViewInternalOverrideUserAgentFunction();
protected:
virtual ~WebViewInternalOverrideUserAgentFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalOverrideUserAgentFunction);
};
class WebViewInternalStopFunction : public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.stop", WEBVIEWINTERNAL_STOP);
WebViewInternalStopFunction();
protected:
virtual ~WebViewInternalStopFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalStopFunction);
};
class WebViewInternalTerminateFunction
: public WebViewInternalExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("webViewInternal.terminate",
WEBVIEWINTERNAL_TERMINATE);
WebViewInternalTerminateFunction();
protected:
virtual ~WebViewInternalTerminateFunction();
private:
// WebViewInternalExtensionFunction implementation.
virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(WebViewInternalTerminateFunction);
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_WEB_VIEW_WEB_VIEW_INTERNAL_API_H_