| 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);
|
| };
|
|
|
|
|