Home | History | Annotate | Download | only in api
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_H_
      6 #define EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_H_
      7 
      8 #include "extensions/browser/extension_function.h"
      9 #include "extensions/browser/script_executor.h"
     10 #include "extensions/common/api/extension_types.h"
     11 
     12 namespace extensions {
     13 
     14 // Base class for javascript code injection.
     15 // This is used by both chrome.webview.executeScript and
     16 // chrome.tabs.executeScript.
     17 class ExecuteCodeFunction : public AsyncExtensionFunction {
     18  public:
     19   ExecuteCodeFunction();
     20 
     21  protected:
     22   virtual ~ExecuteCodeFunction();
     23 
     24   // ExtensionFunction implementation.
     25   virtual bool HasPermission() OVERRIDE;
     26   virtual bool RunAsync() OVERRIDE;
     27 
     28   // Initialize |details_| if it hasn't already been.
     29   virtual bool Init() = 0;
     30   virtual bool ShouldInsertCSS() const = 0;
     31   virtual bool CanExecuteScriptOnPage() = 0;
     32   virtual ScriptExecutor* GetScriptExecutor() = 0;
     33   virtual bool IsWebView() const = 0;
     34   virtual const GURL& GetWebViewSrc() const = 0;
     35   virtual void OnExecuteCodeFinished(const std::string& error,
     36                                      const GURL& on_url,
     37                                      const base::ListValue& result);
     38 
     39   // The injection details.
     40   scoped_ptr<core_api::extension_types::InjectDetails> details_;
     41 
     42  private:
     43   // Called when contents from the file whose path is specified in JSON
     44   // arguments has been loaded.
     45   void DidLoadFile(bool success, const std::string& data);
     46 
     47   // Runs on FILE thread. Loads message bundles for the extension and
     48   // localizes the CSS data. Calls back DidLoadAndLocalizeFile on the UI thread.
     49   void GetFileURLAndLocalizeCSS(ScriptExecutor::ScriptType script_type,
     50                                 const std::string& data,
     51                                 const std::string& extension_id,
     52                                 const base::FilePath& extension_path,
     53                                 const std::string& extension_default_locale);
     54 
     55   // Called when contents from the loaded file have been localized.
     56   void DidLoadAndLocalizeFile(bool success, const std::string& data);
     57 
     58   // Run in UI thread.  Code string contains the code to be executed. Returns
     59   // true on success. If true is returned, this does an AddRef.
     60   bool Execute(const std::string& code_string);
     61 
     62   // Contains extension resource built from path of file which is
     63   // specified in JSON arguments.
     64   ExtensionResource resource_;
     65 
     66   // The URL of the file being injected into the page.
     67   GURL file_url_;
     68 };
     69 
     70 }  // namespace extensions
     71 
     72 #endif  // EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_H_
     73