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)#ifndef CHROME_RENDERER_EXTENSIONS_WEBSTORE_BINDINGS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_RENDERER_EXTENSIONS_WEBSTORE_BINDINGS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/extensions/webstore_install_result.h" 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/renderer/extensions/chrome_v8_extension_handler.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/renderer/object_backed_native_handler.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrame.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A V8 extension that creates an object at window.chrome.webstore. This object 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// allows JavaScript to initiate inline installs of apps that are listed in the 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Chrome Web Store (CWS). 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WebstoreBindings : public ObjectBackedNativeHandler, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ChromeV8ExtensionHandler { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch explicit WebstoreBindings(ScriptContext* context); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Listener 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void Install(const v8::FunctionCallbackInfo<v8::Value>& args); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void OnInlineWebstoreInstallResponse(int install_id, 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool success, 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& error, 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webstore_install::Result result); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnInlineInstallStageChanged(int stage); 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnInlineInstallDownloadProgress(int percent_downloaded); 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extracts a Web Store item ID from a <link rel="chrome-webstore-item" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // href="https://chrome.google.com/webstore/detail/id"> node found in the 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // frame. On success, true will be returned and the |webstore_item_id| 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // parameter will be populated with the ID. On failure, false will be returned 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and |error| will be populated with the error. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GetWebstoreItemIdFromFrame( 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebFrame* frame, const std::string& preferred_store_link_url, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* webstore_item_id, std::string* error); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebstoreBindings); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_RENDERER_EXTENSIONS_WEBSTORE_BINDINGS_H_ 54