blob: 3ba96e21317feb317c80eedc95e299434b9f52dd [file] [log] [blame]
// Copyright (c) 2013 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 EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_H_
#define EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_H_
#include "base/macros.h"
#include "extensions/browser/extension_function.h"
#include "extensions/browser/script_executor.h"
#include "extensions/common/api/extension_types.h"
#include "extensions/common/host_id.h"
namespace extensions {
// Base class for javascript code injection.
// This is used by both chrome.webview.executeScript and
// chrome.tabs.executeScript.
class ExecuteCodeFunction : public AsyncExtensionFunction {
public:
ExecuteCodeFunction();
protected:
~ExecuteCodeFunction() override;
// ExtensionFunction implementation.
bool HasPermission() override;
bool RunAsync() override;
// Initialize |details_| if it hasn't already been.
virtual bool Init() = 0;
virtual bool ShouldInsertCSS() const = 0;
virtual bool CanExecuteScriptOnPage() = 0;
virtual ScriptExecutor* GetScriptExecutor() = 0;
virtual bool IsWebView() const = 0;
virtual const GURL& GetWebViewSrc() const = 0;
virtual void OnExecuteCodeFinished(const std::string& error,
const GURL& on_url,
const base::ListValue& result);
virtual bool LoadFile(const std::string& file);
// Called when contents from the loaded file have been localized.
void DidLoadAndLocalizeFile(const std::string& file,
bool success,
std::unique_ptr<std::string> data);
const HostID& host_id() const { return host_id_; }
void set_host_id(const HostID& host_id) { host_id_ = host_id; }
// The injection details.
std::unique_ptr<api::extension_types::InjectDetails> details_;
private:
// Called when contents from the file whose path is specified in JSON
// arguments has been loaded.
void DidLoadFile(bool success, std::unique_ptr<std::string> data);
// Runs on FILE thread. Loads message bundles for the extension and
// localizes the CSS data. Calls back DidLoadAndLocalizeFile on the UI thread.
void GetFileURLAndLocalizeCSS(ScriptExecutor::ScriptType script_type,
std::unique_ptr<std::string> data,
const std::string& extension_id,
const base::FilePath& extension_path,
const std::string& extension_default_locale);
// Run in UI thread. Code string contains the code to be executed. Returns
// true on success. If true is returned, this does an AddRef.
bool Execute(const std::string& code_string);
// Contains extension resource built from path of file which is
// specified in JSON arguments.
ExtensionResource resource_;
// The URL of the file being injected into the page.
GURL file_url_;
// The ID of the injection host.
HostID host_id_;
DISALLOW_COPY_AND_ASSIGN(ExecuteCodeFunction);
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_H_