15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The AppObjectExtension is a v8 extension that creates an object
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// at window.chrome.app.  This object allows javascript to get details
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on the app state of the page.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The read-only property app.isInstalled is true if the current page is
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// within the extent of an installed, enabled app.
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_RENDERER_EXTENSIONS_APP_BINDINGS_H_
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_RENDERER_EXTENSIONS_APP_BINDINGS_H_
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/renderer/extensions/chrome_v8_extension_handler.h"
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/renderer/object_backed_native_handler.h"
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrame.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass Dispatcher;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implements the chrome.app JavaScript object.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(aa): Add unit testing for this class.
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass AppBindings : public ObjectBackedNativeHandler,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public ChromeV8ExtensionHandler {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  AppBindings(Dispatcher* dispatcher, ScriptContext* context);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IPC::Listener
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void GetIsInstalled(const v8::FunctionCallbackInfo<v8::Value>& args);
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void GetDetails(const v8::FunctionCallbackInfo<v8::Value>& args);
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void GetDetailsForFrame(const v8::FunctionCallbackInfo<v8::Value>& args);
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void GetInstallState(const v8::FunctionCallbackInfo<v8::Value>& args);
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void GetRunningState(const v8::FunctionCallbackInfo<v8::Value>& args);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  v8::Handle<v8::Value> GetDetailsForFrameImpl(blink::WebFrame* frame);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnAppInstallStateResponse(const std::string& state, int callback_id);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Dispatcher handle. Not owned.
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  Dispatcher* dispatcher_;
460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppBindings);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_RENDERER_EXTENSIONS_APP_BINDINGS_H_
53