1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_WEBUI_EXTENSIONS_INSTALL_EXTENSION_HANDLER_H_ 6 #define CHROME_BROWSER_UI_WEBUI_EXTENSIONS_INSTALL_EXTENSION_HANDLER_H_ 7 8 #include "base/files/file_path.h" 9 #include "base/strings/string16.h" 10 #include "base/values.h" 11 #include "content/public/browser/web_ui_message_handler.h" 12 13 namespace content { 14 class WebUIDataSource; 15 } 16 17 namespace extensions { 18 19 // Handles installing an extension when its file is dragged onto the page. 20 class InstallExtensionHandler : public content::WebUIMessageHandler { 21 public: 22 InstallExtensionHandler(); 23 virtual ~InstallExtensionHandler(); 24 25 void GetLocalizedValues(content::WebUIDataSource* source); 26 27 // WebUIMessageHandler implementation. 28 virtual void RegisterMessages() OVERRIDE; 29 30 private: 31 // Handles a notification from the JavaScript that a drag has started. This is 32 // needed so that we can capture the file being dragged. If we wait until 33 // we receive a drop notification, the drop data in the browser process will 34 // have already been destroyed. 35 void HandleStartDragMessage(const base::ListValue* args); 36 37 // Handles a notification from the JavaScript that a drag has stopped. 38 void HandleStopDragMessage(const base::ListValue* args); 39 40 // Handles a notification from the JavaScript to install the file currently 41 // being dragged. 42 // 43 // IMPORTANT: We purposefully do not allow the JavaScript to specify the file 44 // to be installed as a precaution against the extension management page 45 // getting XSS'd. 46 void HandleInstallMessage(const base::ListValue* args); 47 48 // Handles a notification from the JavaScript to install the directory 49 // currently being dragged. 50 void HandleInstallDirectoryMessage(const base::ListValue* args); 51 52 // The path to the file that will be installed when HandleInstallMessage() is 53 // called. 54 base::FilePath file_to_install_; 55 base::string16 file_display_name_; 56 57 DISALLOW_COPY_AND_ASSIGN(InstallExtensionHandler); 58 }; 59 60 } // namespace extensions 61 62 #endif // CHROME_BROWSER_UI_WEBUI_EXTENSIONS_INSTALL_EXTENSION_HANDLER_H_ 63