blob: b57ad497c14243304f030fdccbe0e67b33fe59ba [file] [log] [blame]
// Copyright (c) 2011 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_EXECUTE_CODE_IN_TAB_FUNCTION_H__
#define CHROME_BROWSER_EXTENSIONS_EXECUTE_CODE_IN_TAB_FUNCTION_H__
#pragma once
#include <string>
#include "chrome/browser/extensions/extension_function.h"
#include "chrome/common/extensions/extension_resource.h"
#include "content/browser/tab_contents/tab_contents_observer.h"
// Implement API call tabs.executeScript and tabs.insertCSS.
class ExecuteCodeInTabFunction : public AsyncExtensionFunction,
public TabContentsObserver {
public:
ExecuteCodeInTabFunction();
virtual ~ExecuteCodeInTabFunction();
private:
virtual bool RunImpl();
// TabContentsObserver overrides.
virtual bool OnMessageReceived(const IPC::Message& message);
// Message handler.
void OnExecuteCodeFinished(int request_id, bool success,
const std::string& error);
// Called when contents from the file whose path is specified in JSON
// arguments has been loaded.
void DidLoadFile(bool success, const 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 LocalizeCSS(
const std::string& data,
const std::string& extension_id,
const FilePath& extension_path,
const std::string& extension_default_locale);
// Called when contents from the loaded file have been localized.
void DidLoadAndLocalizeFile(bool success, const std::string& data);
// 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);
// Id of tab which executes code.
int execute_tab_id_;
// Contains extension resource built from path of file which is
// specified in JSON arguments.
ExtensionResource resource_;
// If all_frames_ is true, script or CSS text would be injected
// to all frames; Otherwise only injected to top main frame.
bool all_frames_;
};
class TabsExecuteScriptFunction : public ExecuteCodeInTabFunction {
DECLARE_EXTENSION_FUNCTION_NAME("tabs.executeScript")
};
class TabsInsertCSSFunction : public ExecuteCodeInTabFunction {
DECLARE_EXTENSION_FUNCTION_NAME("tabs.insertCSS")
};
#endif // CHROME_BROWSER_EXTENSIONS_EXECUTE_CODE_IN_TAB_FUNCTION_H__