Home | History | Annotate | Download | only in extensions
      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