Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5037)

Unified Diff: chrome/browser/automation/automation_extension_function.h

Issue 366025: Modifying extension automation so that it is done through a particular... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/automation/automation_extension_function.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/automation/automation_extension_function.h
===================================================================
--- chrome/browser/automation/automation_extension_function.h (revision 31198)
+++ chrome/browser/automation/automation_extension_function.h (working copy)
@@ -8,38 +8,49 @@
#define CHROME_BROWSER_AUTOMATION_AUTOMATION_EXTENSION_FUNCTION_H_
#include <string>
+#include <map>
#include "chrome/browser/extensions/extension_function.h"
class RenderViewHost;
+class TabContents;
// An extension function that pipes the extension API call through the
// automation interface, so that extensions can be tested using UITests.
-class AutomationExtensionFunction : public ExtensionFunction {
+class AutomationExtensionFunction : public AsyncExtensionFunction {
public:
AutomationExtensionFunction() { }
// ExtensionFunction implementation.
virtual void SetArgs(const Value* args);
virtual const std::string GetResult();
- virtual const std::string GetError();
- virtual void Run();
+ virtual bool RunImpl();
static ExtensionFunction* Factory();
+ // Enable API automation of selected APIs. Overridden extension API messages
+ // will be routed to the automation client attached to |api_handler_tab|.
+ //
// If the list of enabled functions is non-empty, we enable according to the
// list ("*" means enable all, otherwise we enable individual named
- // functions). If empty, we restore the initial functions.
+ // functions). An empty list makes this function a no-op.
//
- // Note that all calls to this function, except a call with the empty list,
- // are additive. Functions previously enabled will remain enabled until
- // you clear all function forwarding by specifying the empty list.
- static void SetEnabled(const std::vector<std::string>& functions_enabled);
+ // Note that all calls to this function are additive. Functions previously
+ // enabled will remain enabled until you call Disable().
+ //
+ // Calling this function after enabling one or more functions with a
+ // tab other than the one previously used is an error.
+ static void Enable(TabContents* api_handler_tab,
+ const std::vector<std::string>& functions_enabled);
+ // Restore the default API function implementations and reset the stored
+ // API handler.
+ static void Disable();
+
// Intercepts messages sent from the external host to check if they
// are actually responses to extension API calls. If they are, redirects
- // the message to view_host->SendExtensionResponse and returns true,
- // otherwise returns false to indicate the message was not intercepted.
+ // the message to respond to the pending asynchronous API call and returns
+ // true, otherwise returns false to indicate the message was not intercepted.
static bool InterceptMessageFromExternalHost(RenderViewHost* view_host,
const std::string& message,
const std::string& origin,
@@ -48,8 +59,17 @@
private:
~AutomationExtensionFunction() {}
- static bool enabled_;
+ // Weak reference, lifetime managed by the ExternalTabContainer instance
+ // owning the TabContents in question.
+ static TabContents* api_handler_tab_;
+
+ typedef std::map<int, scoped_refptr<AutomationExtensionFunction> >
+ PendingFunctionsMap;
+ static PendingFunctionsMap pending_functions_;
+
std::string args_;
+ std::string json_result_;
+
DISALLOW_COPY_AND_ASSIGN(AutomationExtensionFunction);
};
« no previous file with comments | « no previous file | chrome/browser/automation/automation_extension_function.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698