summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation/automation_extension_function.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/automation/automation_extension_function.h')
-rw-r--r--chrome/browser/automation/automation_extension_function.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/chrome/browser/automation/automation_extension_function.h b/chrome/browser/automation/automation_extension_function.h
new file mode 100644
index 0000000..5e15e9e
--- /dev/null
+++ b/chrome/browser/automation/automation_extension_function.h
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 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.
+
+// Defines AutomationExtensionFunction.
+
+#ifndef CHROME_BROWSER_AUTOMATION_AUTOMATION_EXTENSION_FUNCTION_H_
+#define CHROME_BROWSER_AUTOMATION_AUTOMATION_EXTENSION_FUNCTION_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#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 AsyncExtensionFunction {
+ public:
+ AutomationExtensionFunction() { }
+
+ // ExtensionFunction implementation.
+ virtual void SetArgs(const ListValue* args);
+ virtual const std::string GetResult();
+ 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). An empty list makes this function a no-op.
+ //
+ // 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 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,
+ const std::string& target);
+
+ private:
+ ~AutomationExtensionFunction() {}
+
+ // 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);
+};
+
+#endif // CHROME_BROWSER_AUTOMATION_AUTOMATION_EXTENSION_FUNCTION_H_