| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALLER_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALLER_H_ |
| 6 #define CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALLER_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALLER_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
| 13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 14 #include "content/public/browser/download_id.h" |
| 15 #include "content/public/browser/download_item.h" |
| 14 #include "content/public/browser/notification_observer.h" | 16 #include "content/public/browser/notification_observer.h" |
| 15 #include "content/public/browser/notification_registrar.h" | 17 #include "content/public/browser/notification_registrar.h" |
| 18 #include "net/base/net_errors.h" |
| 16 #include "googleurl/src/gurl.h" | 19 #include "googleurl/src/gurl.h" |
| 17 | 20 |
| 18 class FilePath; | 21 class FilePath; |
| 19 class Profile; | 22 class Profile; |
| 20 | 23 |
| 21 namespace content { | 24 namespace content { |
| 22 class NavigationController; | 25 class NavigationController; |
| 23 } | 26 } |
| 24 | 27 |
| 25 // Downloads and installs extensions from the web store. | 28 // Downloads and installs extensions from the web store. |
| 26 class WebstoreInstaller : public content::NotificationObserver, | 29 class WebstoreInstaller : public content::NotificationObserver, |
| 30 public content::DownloadItem::Observer, |
| 27 public base::RefCounted<WebstoreInstaller> { | 31 public base::RefCounted<WebstoreInstaller> { |
| 28 public: | 32 public: |
| 29 enum Flag { | 33 enum Flag { |
| 30 FLAG_NONE = 0, | 34 FLAG_NONE = 0, |
| 31 | 35 |
| 32 // Inline installs trigger slightly different behavior (install source | 36 // Inline installs trigger slightly different behavior (install source |
| 33 // is different, download referrers are the item's page in the gallery). | 37 // is different, download referrers are the item's page in the gallery). |
| 34 FLAG_INLINE_INSTALL = 1 << 0 | 38 FLAG_INLINE_INSTALL = 1 << 0 |
| 35 }; | 39 }; |
| 36 | 40 |
| 37 class Delegate { | 41 class Delegate { |
| 38 public: | 42 public: |
| 39 virtual void OnExtensionInstallSuccess(const std::string& id) = 0; | 43 virtual void OnExtensionInstallSuccess(const std::string& id) = 0; |
| 40 virtual void OnExtensionInstallFailure(const std::string& id, | 44 virtual void OnExtensionInstallFailure(const std::string& id, |
| 41 const std::string& error) = 0; | 45 const std::string& error) = 0; |
| 42 }; | 46 }; |
| 43 | 47 |
| 44 | |
| 45 // Creates a WebstoreInstaller for downloading and installing the extension | 48 // Creates a WebstoreInstaller for downloading and installing the extension |
| 46 // with the given |id| from the Chrome Web Store. If |delegate| is not NULL, | 49 // with the given |id| from the Chrome Web Store. If |delegate| is not NULL, |
| 47 // it will be notified when the install succeeds or fails. The installer will | 50 // it will be notified when the install succeeds or fails. The installer will |
| 48 // use the specified |controller| to download the extension. Only one | 51 // use the specified |controller| to download the extension. Only one |
| 49 // WebstoreInstaller can use a specific controller at any given time. | 52 // WebstoreInstaller can use a specific controller at any given time. |
| 50 // Note: the delegate should stay alive until being called back. | 53 // Note: the delegate should stay alive until being called back. |
| 51 WebstoreInstaller(Profile* profile, | 54 WebstoreInstaller(Profile* profile, |
| 52 Delegate* delegate, | 55 Delegate* delegate, |
| 53 content::NavigationController* controller, | 56 content::NavigationController* controller, |
| 54 const std::string& id, | 57 const std::string& id, |
| 55 int flags); | 58 int flags); |
| 56 virtual ~WebstoreInstaller(); | 59 virtual ~WebstoreInstaller(); |
| 57 | 60 |
| 58 // Starts downloading and installing the extension. | 61 // Starts downloading and installing the extension. |
| 59 void Start(); | 62 void Start(); |
| 60 | 63 |
| 61 // content::NotificationObserver | 64 // content::NotificationObserver |
| 62 virtual void Observe(int type, | 65 virtual void Observe(int type, |
| 63 const content::NotificationSource& source, | 66 const content::NotificationSource& source, |
| 64 const content::NotificationDetails& details) OVERRIDE; | 67 const content::NotificationDetails& details) OVERRIDE; |
| 65 | 68 |
| 66 // Instead of using the default download directory, use |directory| instead. | 69 // Instead of using the default download directory, use |directory| instead. |
| 67 // This does *not* transfer ownership of |directory|. | 70 // This does *not* transfer ownership of |directory|. |
| 68 static void SetDownloadDirectoryForTests(FilePath* directory); | 71 static void SetDownloadDirectoryForTests(FilePath* directory); |
| 69 | 72 |
| 70 private: | 73 private: |
| 74 // DownloadManager::DownloadUrl callback. |
| 75 void OnDownloadStarted(content::DownloadId id, net::Error error); |
| 76 |
| 77 // DownloadItem::Observer implementation: |
| 78 virtual void OnDownloadUpdated(content::DownloadItem* download) OVERRIDE; |
| 79 virtual void OnDownloadOpened(content::DownloadItem* download) OVERRIDE; |
| 80 |
| 71 // Starts downloading the extension to |file_path|. | 81 // Starts downloading the extension to |file_path|. |
| 72 void StartDownload(const FilePath& file_path); | 82 void StartDownload(const FilePath& file_path); |
| 73 | 83 |
| 74 // Reports an install |error| to the delegate for the given extension if this | 84 // Reports an install |error| to the delegate for the given extension if this |
| 75 // managed its installation. This also removes the associated PendingInstall. | 85 // managed its installation. This also removes the associated PendingInstall. |
| 76 void ReportFailure(const std::string& error); | 86 void ReportFailure(const std::string& error); |
| 77 | 87 |
| 78 // Reports a successful install to the delegate for the given extension if | 88 // Reports a successful install to the delegate for the given extension if |
| 79 // this managed its installation. This also removes the associated | 89 // this managed its installation. This also removes the associated |
| 80 // PendingInstall. | 90 // PendingInstall. |
| 81 void ReportSuccess(); | 91 void ReportSuccess(); |
| 82 | 92 |
| 83 content::NotificationRegistrar registrar_; | 93 content::NotificationRegistrar registrar_; |
| 84 Profile* profile_; | 94 Profile* profile_; |
| 85 Delegate* delegate_; | 95 Delegate* delegate_; |
| 86 content::NavigationController* controller_; | 96 content::NavigationController* controller_; |
| 87 std::string id_; | 97 std::string id_; |
| 98 // The DownloadItem is owned by the DownloadManager and is valid from when |
| 99 // OnDownloadStarted is called (with no error) until the DownloadItem |
| 100 // transitions to state REMOVING. |
| 101 content::DownloadItem* download_item_; |
| 88 int flags_; | 102 int flags_; |
| 89 GURL download_url_; | 103 GURL download_url_; |
| 90 }; | 104 }; |
| 91 | 105 |
| 92 #endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALLER_H_ | 106 #endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALLER_H_ |
| OLD | NEW |