Index: chrome/renderer/extensions/extension_base.h |
diff --git a/chrome/renderer/extensions/extension_base.h b/chrome/renderer/extensions/extension_base.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..01372654b895290cd67b8ec50b5b6b7b2da65599 |
--- /dev/null |
+++ b/chrome/renderer/extensions/extension_base.h |
@@ -0,0 +1,75 @@ |
+// 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_RENDERER_EXTENSIONS_EXTENSION_BASE_H_ |
+#define CHROME_RENDERER_EXTENSIONS_EXTENSION_BASE_H_ |
+#pragma once |
+ |
+#include "base/logging.h" |
+#include "v8/include/v8.h" |
+ |
+#include <string> |
+ |
+class Extension; |
+class ExtensionDispatcher; |
+class RenderView; |
+ |
+namespace WebKit { |
+class WebFrame; |
+} |
+ |
+// This is a base class for chrome extension bindings. Common features that |
+// are shared by different modules go here. |
+class ExtensionBase : public v8::Extension { |
+ public: |
+ static const char* GetStringResource(int resource_id); |
+ |
+ ExtensionBase(const char* name, |
+ const char* source, |
+ int dep_count, |
+ const char** deps, |
+ ExtensionDispatcher* extension_dispatcher) |
+ : v8::Extension(name, source, dep_count, deps), |
+ extension_dispatcher_(extension_dispatcher) { |
+ } |
+ |
+ // Derived classes should call this at the end of their implementation in |
+ // order to expose common native functions, like GetChromeHidden, to the |
+ // v8 extension. |
+ virtual v8::Handle<v8::FunctionTemplate> |
+ GetNativeFunction(v8::Handle<v8::String> name); |
+ |
+ // TODO(jstritar): Used for testing http://crbug.com/91582. Remove when done. |
+ ExtensionDispatcher* extension_dispatcher() { return extension_dispatcher_; } |
+ |
+ protected: |
+ template<class T> |
+ static T* GetFromArguments(const v8::Arguments& args) { |
+ CHECK(!args.Data().IsEmpty()); |
+ T* result = static_cast<T*>(args.Data().As<v8::External>()->Value()); |
+ return result; |
+ } |
+ |
+ // Note: do not call this function before or during the chromeHidden.onLoad |
+ // event dispatch. The URL might not have been committed yet and might not |
+ // be an extension URL. |
+ const ::Extension* GetExtensionForCurrentContext() const; |
+ |
+ // Checks that the current context contains an extension that has permission |
+ // to execute the specified function. If it does not, a v8 exception is thrown |
+ // and the method returns false. Otherwise returns true. |
+ bool CheckPermissionForCurrentContext(const std::string& function_name) const; |
+ |
+ // Returns a hidden variable for use by the bindings that is unreachable |
+ // by the page. |
+ static v8::Handle<v8::Value> GetChromeHidden(const v8::Arguments& args); |
+ |
+ ExtensionDispatcher* extension_dispatcher_; |
+ |
+ private: |
+ // Helper to print from bindings javascript. |
+ static v8::Handle<v8::Value> Print(const v8::Arguments& args); |
+}; |
+ |
+#endif // CHROME_RENDERER_EXTENSIONS_EXTENSION_BASE_H_ |