summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/extensions
diff options
context:
space:
mode:
authorskerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-27 14:22:12 +0000
committerskerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-27 14:22:12 +0000
commit2747dd8492489e9b5efa322990185537c9557c60 (patch)
tree7992f279958da0a98978f1848bfb2119c0721cd8 /chrome/renderer/extensions
parente5a00caa638c720ed9257c57e98b0f8476ce5853 (diff)
downloadchromium_src-2747dd8492489e9b5efa322990185537c9557c60.zip
chromium_src-2747dd8492489e9b5efa322990185537c9557c60.tar.gz
chromium_src-2747dd8492489e9b5efa322990185537c9557c60.tar.bz2
Implement window.chrome.app.isInstalled .
BUG=49225 TEST=ExtensionBrowserTest.PropertyAppIsInstalled Review URL: http://codereview.chromium.org/3169045 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57674 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/extensions')
-rw-r--r--chrome/renderer/extensions/chrome_app_bindings.cc61
-rw-r--r--chrome/renderer/extensions/chrome_app_bindings.h28
2 files changed, 89 insertions, 0 deletions
diff --git a/chrome/renderer/extensions/chrome_app_bindings.cc b/chrome/renderer/extensions/chrome_app_bindings.cc
new file mode 100644
index 0000000..37558dc
--- /dev/null
+++ b/chrome/renderer/extensions/chrome_app_bindings.cc
@@ -0,0 +1,61 @@
+// Copyright (c) 2010 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.
+
+#include "chrome/renderer/extensions/chrome_app_bindings.h"
+
+#include "chrome/renderer/render_thread.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
+#include "v8/include/v8.h"
+
+using WebKit::WebFrame;
+
+namespace extensions_v8 {
+
+static const char* const kAppExtensionName = "v8/ChromeApp";
+
+class ChromeAppExtensionWrapper : public v8::Extension {
+ public:
+ ChromeAppExtensionWrapper() :
+ v8::Extension(kAppExtensionName,
+ "var chrome;"
+ "if (!chrome)"
+ " chrome = {};"
+ "if (!chrome.app) {"
+ " chrome.app = new function() {"
+ " native function GetIsInstalled();"
+ " this.__defineGetter__('isInstalled', GetIsInstalled);"
+ " };"
+ "}") {}
+
+ virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
+ v8::Handle<v8::String> name) {
+ if (name->Equals(v8::String::New("GetIsInstalled"))) {
+ return v8::FunctionTemplate::New(GetIsInstalled);
+ }
+ return v8::Handle<v8::FunctionTemplate>();
+ }
+
+ static v8::Handle<v8::Value> GetIsInstalled(const v8::Arguments& args) {
+ WebFrame* frame = WebFrame::frameForCurrentContext();
+ if (!frame)
+ return v8::Boolean::New(false);
+
+ GURL url(frame->url());
+ if (url.is_empty() ||
+ !url.is_valid() ||
+ !(url.SchemeIs("http") || url.SchemeIs("https")))
+ return v8::Boolean::New(false);
+
+ bool has_web_extent =
+ !RenderThread::current()->GetExtensionIdByURL(url).empty();
+
+ return v8::Boolean::New(has_web_extent);
+ }
+};
+
+v8::Extension* ChromeAppExtension::Get() {
+ return new ChromeAppExtensionWrapper();
+}
+
+} // namespace extensions_v8
diff --git a/chrome/renderer/extensions/chrome_app_bindings.h b/chrome/renderer/extensions/chrome_app_bindings.h
new file mode 100644
index 0000000..1292eb2
--- /dev/null
+++ b/chrome/renderer/extensions/chrome_app_bindings.h
@@ -0,0 +1,28 @@
+// Copyright (c) 2010 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.
+
+// The AppObjectExtension is a v8 extension that creates an object
+// at window.chrome.app. This object allows javascript to get details
+// on the app state of the page.
+// The read-only property app.isInstalled is true if the current page is
+// within the extent of an installed, enabled app.
+
+#ifndef CHROME_RENDERER_EXTENSIONS_CHROME_APP_BINDINGS_H_
+#define CHROME_RENDERER_EXTENSIONS_CHROME_APP_BINDINGS_H_
+#pragma once
+
+namespace v8 {
+class Extension;
+}
+
+namespace extensions_v8 {
+
+class ChromeAppExtension {
+ public:
+ static v8::Extension* Get();
+};
+
+} // namespace extensions_v8
+
+#endif // CHROME_RENDERER_EXTENSIONS_CHROME_APP_BINDINGS_H_