// 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);
// 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);
TabContentsObserver::Registrar registrar_;
// 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__