blob: 7300832349e8a48a93c2c9962c7bd7d5c755fce3 [file] [log] [blame]
// Copyright (c) 2012 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_TABS_TABS_API_H_
#define CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_API_H_
#include <string>
#include <vector>
#include "base/compiler_specific.h"
#include "chrome/browser/extensions/chrome_extension_function_details.h"
#include "chrome/common/extensions/api/tabs.h"
#include "components/zoom/zoom_controller.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "extensions/browser/api/execute_code_function.h"
#include "extensions/browser/api/web_contents_capture_client.h"
#include "extensions/browser/extension_function.h"
#include "extensions/common/extension_resource.h"
#include "extensions/common/user_script.h"
#include "url/gurl.h"
class GURL;
class SkBitmap;
class TabStripModel;
namespace content {
class WebContents;
}
namespace ui {
class ListSelectionModel;
}
namespace user_prefs {
class PrefRegistrySyncable;
}
namespace extensions {
// Converts a ZoomMode to its ZoomSettings representation.
void ZoomModeToZoomSettings(zoom::ZoomController::ZoomMode zoom_mode,
api::tabs::ZoomSettings* zoom_settings);
// Windows
class WindowsGetFunction : public UIThreadExtensionFunction {
~WindowsGetFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("windows.get", WINDOWS_GET)
};
class WindowsGetCurrentFunction : public UIThreadExtensionFunction {
~WindowsGetCurrentFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("windows.getCurrent", WINDOWS_GETCURRENT)
};
class WindowsGetLastFocusedFunction : public UIThreadExtensionFunction {
~WindowsGetLastFocusedFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("windows.getLastFocused", WINDOWS_GETLASTFOCUSED)
};
class WindowsGetAllFunction : public UIThreadExtensionFunction {
~WindowsGetAllFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("windows.getAll", WINDOWS_GETALL)
};
class WindowsCreateFunction : public UIThreadExtensionFunction {
~WindowsCreateFunction() override {}
ResponseAction Run() override;
// Returns whether the window should be created in incognito mode.
// |create_data| are the options passed by the extension. It may be NULL.
// |urls| is the list of urls to open. If we are creating an incognito window,
// the function will remove these urls which may not be opened in incognito
// mode. If window creation leads the browser into an erroneous state,
// |is_error| is set to true (also, error_ member variable is assigned
// the proper error message).
bool ShouldOpenIncognitoWindow(
const api::windows::Create::Params::CreateData* create_data,
std::vector<GURL>* urls,
std::string* error);
DECLARE_EXTENSION_FUNCTION("windows.create", WINDOWS_CREATE)
};
class WindowsUpdateFunction : public UIThreadExtensionFunction {
~WindowsUpdateFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("windows.update", WINDOWS_UPDATE)
};
class WindowsRemoveFunction : public UIThreadExtensionFunction {
~WindowsRemoveFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("windows.remove", WINDOWS_REMOVE)
};
// Tabs
class TabsGetFunction : public UIThreadExtensionFunction {
~TabsGetFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.get", TABS_GET)
};
class TabsGetCurrentFunction : public UIThreadExtensionFunction {
~TabsGetCurrentFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.getCurrent", TABS_GETCURRENT)
};
class TabsGetSelectedFunction : public UIThreadExtensionFunction {
~TabsGetSelectedFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.getSelected", TABS_GETSELECTED)
};
class TabsGetAllInWindowFunction : public UIThreadExtensionFunction {
~TabsGetAllInWindowFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.getAllInWindow", TABS_GETALLINWINDOW)
};
class TabsQueryFunction : public UIThreadExtensionFunction {
~TabsQueryFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.query", TABS_QUERY)
};
class TabsCreateFunction : public UIThreadExtensionFunction {
~TabsCreateFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.create", TABS_CREATE)
};
class TabsDuplicateFunction : public UIThreadExtensionFunction {
~TabsDuplicateFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.duplicate", TABS_DUPLICATE)
};
class TabsHighlightFunction : public UIThreadExtensionFunction {
~TabsHighlightFunction() override {}
ResponseAction Run() override;
bool HighlightTab(TabStripModel* tabstrip,
ui::ListSelectionModel* selection,
int* active_index,
int index,
std::string* error);
DECLARE_EXTENSION_FUNCTION("tabs.highlight", TABS_HIGHLIGHT)
};
class TabsUpdateFunction : public UIThreadExtensionFunction {
public:
TabsUpdateFunction();
protected:
~TabsUpdateFunction() override {}
bool UpdateURL(const std::string& url,
int tab_id,
std::string* error);
ResponseValue GetResult();
content::WebContents* web_contents_;
private:
ResponseAction Run() override;
void OnExecuteCodeFinished(const std::string& error,
const GURL& on_url,
const base::ListValue& script_result);
DECLARE_EXTENSION_FUNCTION("tabs.update", TABS_UPDATE)
};
class TabsMoveFunction : public UIThreadExtensionFunction {
~TabsMoveFunction() override {}
ResponseAction Run() override;
bool MoveTab(int tab_id,
int* new_index,
int iteration,
base::ListValue* tab_values,
int* window_id,
std::string* error);
DECLARE_EXTENSION_FUNCTION("tabs.move", TABS_MOVE)
};
class TabsReloadFunction : public UIThreadExtensionFunction {
~TabsReloadFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.reload", TABS_RELOAD)
};
class TabsRemoveFunction : public UIThreadExtensionFunction {
~TabsRemoveFunction() override {}
ResponseAction Run() override;
bool RemoveTab(int tab_id, std::string* error);
DECLARE_EXTENSION_FUNCTION("tabs.remove", TABS_REMOVE)
};
class TabsDetectLanguageFunction : public UIThreadExtensionFunction,
public content::NotificationObserver {
private:
~TabsDetectLanguageFunction() override {}
ResponseAction Run() override;
void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) override;
void GotLanguage(const std::string& language);
content::NotificationRegistrar registrar_;
DECLARE_EXTENSION_FUNCTION("tabs.detectLanguage", TABS_DETECTLANGUAGE)
};
class TabsCaptureVisibleTabFunction
: public extensions::WebContentsCaptureClient,
public UIThreadExtensionFunction {
public:
TabsCaptureVisibleTabFunction();
static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
// ExtensionFunction implementation.
bool HasPermission() override;
ResponseAction Run() override;
protected:
~TabsCaptureVisibleTabFunction() override {}
private:
ChromeExtensionFunctionDetails chrome_details_;
content::WebContents* GetWebContentsForID(int window_id, std::string* error);
// extensions::WebContentsCaptureClient:
bool IsScreenshotEnabled() const override;
bool ClientAllowsTransparency() override;
void OnCaptureSuccess(const SkBitmap& bitmap) override;
void OnCaptureFailure(CaptureResult result) override;
private:
DECLARE_EXTENSION_FUNCTION("tabs.captureVisibleTab", TABS_CAPTUREVISIBLETAB)
static std::string CaptureResultToErrorMessage(CaptureResult result);
DISALLOW_COPY_AND_ASSIGN(TabsCaptureVisibleTabFunction);
};
// Implement API call tabs.executeScript and tabs.insertCSS.
class ExecuteCodeInTabFunction : public ExecuteCodeFunction {
public:
ExecuteCodeInTabFunction();
protected:
~ExecuteCodeInTabFunction() override;
// Initializes |execute_tab_id_| and |details_|.
InitResult Init() override;
bool CanExecuteScriptOnPage(std::string* error) override;
ScriptExecutor* GetScriptExecutor(std::string* error) override;
bool IsWebView() const override;
const GURL& GetWebViewSrc() const override;
private:
const ChromeExtensionFunctionDetails chrome_details_;
// Id of tab which executes code.
int execute_tab_id_;
};
class TabsExecuteScriptFunction : public ExecuteCodeInTabFunction {
protected:
bool ShouldInsertCSS() const override;
private:
~TabsExecuteScriptFunction() override {}
DECLARE_EXTENSION_FUNCTION("tabs.executeScript", TABS_EXECUTESCRIPT)
};
class TabsInsertCSSFunction : public ExecuteCodeInTabFunction {
private:
~TabsInsertCSSFunction() override {}
bool ShouldInsertCSS() const override;
DECLARE_EXTENSION_FUNCTION("tabs.insertCSS", TABS_INSERTCSS)
};
class TabsSetZoomFunction : public UIThreadExtensionFunction {
private:
~TabsSetZoomFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.setZoom", TABS_SETZOOM)
};
class TabsGetZoomFunction : public UIThreadExtensionFunction {
private:
~TabsGetZoomFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.getZoom", TABS_GETZOOM)
};
class TabsSetZoomSettingsFunction : public UIThreadExtensionFunction {
private:
~TabsSetZoomSettingsFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.setZoomSettings", TABS_SETZOOMSETTINGS)
};
class TabsGetZoomSettingsFunction : public UIThreadExtensionFunction {
private:
~TabsGetZoomSettingsFunction() override {}
ResponseAction Run() override;
DECLARE_EXTENSION_FUNCTION("tabs.getZoomSettings", TABS_GETZOOMSETTINGS)
};
class TabsDiscardFunction : public UIThreadExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("tabs.discard", TABS_DISCARD)
TabsDiscardFunction();
private:
~TabsDiscardFunction() override;
// ExtensionFunction:
ExtensionFunction::ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(TabsDiscardFunction);
};
class TabsGoForwardFunction : public UIThreadExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("tabs.goForward", TABS_GOFORWARD)
TabsGoForwardFunction() {}
private:
~TabsGoForwardFunction() override {}
// ExtensionFunction:
ExtensionFunction::ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(TabsGoForwardFunction);
};
class TabsGoBackFunction : public UIThreadExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("tabs.goBack", TABS_GOBACK)
TabsGoBackFunction() {}
private:
~TabsGoBackFunction() override {}
// ExtensionFunction:
ExtensionFunction::ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(TabsGoBackFunction);
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_API_H_