diff options
author | skerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-27 14:22:12 +0000 |
---|---|---|
committer | skerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-27 14:22:12 +0000 |
commit | 2747dd8492489e9b5efa322990185537c9557c60 (patch) | |
tree | 7992f279958da0a98978f1848bfb2119c0721cd8 /chrome/renderer/extensions | |
parent | e5a00caa638c720ed9257c57e98b0f8476ce5853 (diff) | |
download | chromium_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.cc | 61 | ||||
-rw-r--r-- | chrome/renderer/extensions/chrome_app_bindings.h | 28 |
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_ |