| 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_STANDALONE_INSTALLER_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_WEBSTORE_STANDALONE_INSTALLER_H_ |
| 6 #define CHROME_BROWSER_EXTENSIONS_WEBSTORE_STANDALONE_INSTALLER_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_WEBSTORE_STANDALONE_INSTALLER_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/values.h" | 13 #include "base/values.h" |
| 14 #include "chrome/browser/extensions/extension_install_prompt.h" | 14 #include "chrome/browser/extensions/extension_install_prompt.h" |
| 15 #include "chrome/browser/extensions/webstore_data_fetcher_delegate.h" |
| 15 #include "chrome/browser/extensions/webstore_install_helper.h" | 16 #include "chrome/browser/extensions/webstore_install_helper.h" |
| 16 #include "chrome/browser/extensions/webstore_installer.h" | 17 #include "chrome/browser/extensions/webstore_installer.h" |
| 17 #include "content/public/browser/web_contents_observer.h" | 18 #include "content/public/browser/web_contents_observer.h" |
| 18 #include "googleurl/src/gurl.h" | 19 #include "googleurl/src/gurl.h" |
| 19 #include "net/url_request/url_fetcher_delegate.h" | 20 #include "net/url_request/url_fetcher_delegate.h" |
| 20 #include "third_party/skia/include/core/SkBitmap.h" | 21 #include "third_party/skia/include/core/SkBitmap.h" |
| 21 | 22 |
| 22 | 23 |
| 23 namespace net { | 24 namespace net { |
| 24 class URLFetcher; | 25 class URLFetcher; |
| 25 } | 26 } |
| 26 | 27 |
| 27 namespace extensions { | 28 namespace extensions { |
| 28 class Extension; | 29 class Extension; |
| 29 class SafeWebstoreResponseParser; | 30 class WebstoreDataFetcher; |
| 30 | 31 |
| 31 // Manages inline installs requested by a page (downloads and parses metadata | 32 // Manages inline installs requested by a page (downloads and parses metadata |
| 32 // from the webstore, shows the install UI, starts the download once the user | 33 // from the webstore, shows the install UI, starts the download once the user |
| 33 // confirms). Clients must implement the WebstoreStandaloneInstaller::Delegate | 34 // confirms). Clients must implement the WebstoreStandaloneInstaller::Delegate |
| 34 // interface to be notified when the inline install completes (successfully or | 35 // interface to be notified when the inline install completes (successfully or |
| 35 // not). The client will not be notified if the WebContents that this install | 36 // not). The client will not be notified if the WebContents that this install |
| 36 // request is attached to goes away. | 37 // request is attached to goes away. |
| 37 class WebstoreStandaloneInstaller | 38 class WebstoreStandaloneInstaller |
| 38 : public base::RefCountedThreadSafe<WebstoreStandaloneInstaller>, | 39 : public base::RefCountedThreadSafe<WebstoreStandaloneInstaller>, |
| 39 public ExtensionInstallPrompt::Delegate, | 40 public ExtensionInstallPrompt::Delegate, |
| 40 public content::WebContentsObserver, | 41 public content::WebContentsObserver, |
| 41 public net::URLFetcherDelegate, | 42 public WebstoreDataFetcherDelegate, |
| 42 public WebstoreInstaller::Delegate, | 43 public WebstoreInstaller::Delegate, |
| 43 public WebstoreInstallHelper::Delegate { | 44 public WebstoreInstallHelper::Delegate { |
| 44 public: | 45 public: |
| 45 enum VerifiedSiteRequired { | 46 enum VerifiedSiteRequired { |
| 46 REQUIRE_VERIFIED_SITE, | 47 REQUIRE_VERIFIED_SITE, |
| 47 DO_NOT_REQUIRE_VERIFIED_SITE | 48 DO_NOT_REQUIRE_VERIFIED_SITE |
| 48 }; | 49 }; |
| 49 | 50 |
| 50 enum PromptType { | 51 enum PromptType { |
| 51 STANDARD_PROMPT, | 52 STANDARD_PROMPT, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 64 PromptType prompt_type, | 65 PromptType prompt_type, |
| 65 GURL requestor_url, | 66 GURL requestor_url, |
| 66 Callback callback); | 67 Callback callback); |
| 67 | 68 |
| 68 void set_skip_post_install_ui(bool skip) { skip_post_install_ui_ = skip; } | 69 void set_skip_post_install_ui(bool skip) { skip_post_install_ui_ = skip; } |
| 69 | 70 |
| 70 void BeginInstall(); | 71 void BeginInstall(); |
| 71 | 72 |
| 72 private: | 73 private: |
| 73 friend class base::RefCountedThreadSafe<WebstoreStandaloneInstaller>; | 74 friend class base::RefCountedThreadSafe<WebstoreStandaloneInstaller>; |
| 74 friend class SafeWebstoreResponseParser; | |
| 75 FRIEND_TEST_ALL_PREFIXES(WebstoreStandaloneInstallerTest, DomainVerification); | 75 FRIEND_TEST_ALL_PREFIXES(WebstoreStandaloneInstallerTest, DomainVerification); |
| 76 | 76 |
| 77 virtual ~WebstoreStandaloneInstaller(); | 77 virtual ~WebstoreStandaloneInstaller(); |
| 78 | 78 |
| 79 // Several delegate/client inteface implementations follow. The normal flow | 79 // Several delegate/client inteface implementations follow. The normal flow |
| 80 // (for successful installs) is: | 80 // (for successful installs) is: |
| 81 // | 81 // |
| 82 // 1. BeginInstall: starts the fetch of data from the webstore | 82 // 1. BeginInstall: starts the fetch of data from the webstore |
| 83 // 2. OnURLFetchComplete: starts the parsing of data from the webstore | 83 // 2. OnURLFetchComplete: starts the parsing of data from the webstore |
| 84 // 3. OnWebstoreResponseParseSuccess: starts the parsing of the manifest and | 84 // 3. OnWebstoreResponseParseSuccess: starts the parsing of the manifest and |
| 85 // fetching of icon data. | 85 // fetching of icon data. |
| 86 // 4. OnWebstoreParseSuccess: shows the install UI | 86 // 4. OnWebstoreParseSuccess: shows the install UI |
| 87 // 5. InstallUIProceed: initiates the .crx download/install | 87 // 5. InstallUIProceed: initiates the .crx download/install |
| 88 // | 88 // |
| 89 // All flows (whether successful or not) end up in CompleteInstall, which | 89 // All flows (whether successful or not) end up in CompleteInstall, which |
| 90 // informs our delegate of success/failure. | 90 // informs our delegate of success/failure. |
| 91 | 91 |
| 92 // net::URLFetcherDelegate interface implementation. | 92 // WebstoreDataFetcherDelegate interface implementation. |
| 93 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; | 93 virtual void OnWebstoreRequestFailure() OVERRIDE; |
| 94 | 94 virtual void OnWebstoreResponseParseSuccess( |
| 95 // Client callbacks for SafeWebstoreResponseParser when parsing is complete. | 95 base::DictionaryValue* webstore_data) OVERRIDE; |
| 96 void OnWebstoreResponseParseSuccess(DictionaryValue* webstore_data); | 96 virtual void OnWebstoreResponseParseFailure( |
| 97 void OnWebstoreResponseParseFailure(const std::string& error); | 97 const std::string& error) OVERRIDE; |
| 98 | 98 |
| 99 // WebstoreInstallHelper::Delegate interface implementation. | 99 // WebstoreInstallHelper::Delegate interface implementation. |
| 100 virtual void OnWebstoreParseSuccess( | 100 virtual void OnWebstoreParseSuccess( |
| 101 const std::string& id, | 101 const std::string& id, |
| 102 const SkBitmap& icon, | 102 const SkBitmap& icon, |
| 103 base::DictionaryValue* parsed_manifest) OVERRIDE; | 103 base::DictionaryValue* parsed_manifest) OVERRIDE; |
| 104 virtual void OnWebstoreParseFailure( | 104 virtual void OnWebstoreParseFailure( |
| 105 const std::string& id, | 105 const std::string& id, |
| 106 InstallHelperResultCode result_code, | 106 InstallHelperResultCode result_code, |
| 107 const std::string& error_message) OVERRIDE; | 107 const std::string& error_message) OVERRIDE; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 130 | 130 |
| 131 std::string id_; | 131 std::string id_; |
| 132 bool require_verified_site_; | 132 bool require_verified_site_; |
| 133 PromptType prompt_type_; | 133 PromptType prompt_type_; |
| 134 GURL requestor_url_; | 134 GURL requestor_url_; |
| 135 Callback callback_; | 135 Callback callback_; |
| 136 scoped_ptr<ExtensionInstallPrompt> install_ui_; | 136 scoped_ptr<ExtensionInstallPrompt> install_ui_; |
| 137 bool skip_post_install_ui_; | 137 bool skip_post_install_ui_; |
| 138 | 138 |
| 139 // For fetching webstore JSON data. | 139 // For fetching webstore JSON data. |
| 140 scoped_ptr<net::URLFetcher> webstore_data_url_fetcher_; | 140 scoped_ptr<WebstoreDataFetcher> webstore_data_fetcher_; |
| 141 | 141 |
| 142 // Extracted from the webstore JSON data response. | 142 // Extracted from the webstore JSON data response. |
| 143 std::string localized_name_; | 143 std::string localized_name_; |
| 144 std::string localized_description_; | 144 std::string localized_description_; |
| 145 std::string localized_user_count_; | 145 std::string localized_user_count_; |
| 146 double average_rating_; | 146 double average_rating_; |
| 147 int rating_count_; | 147 int rating_count_; |
| 148 scoped_ptr<DictionaryValue> webstore_data_; | 148 scoped_ptr<DictionaryValue> webstore_data_; |
| 149 scoped_ptr<DictionaryValue> manifest_; | 149 scoped_ptr<DictionaryValue> manifest_; |
| 150 scoped_refptr<Extension> dummy_extension_; | 150 scoped_refptr<Extension> dummy_extension_; |
| 151 SkBitmap icon_; | 151 SkBitmap icon_; |
| 152 | 152 |
| 153 DISALLOW_IMPLICIT_CONSTRUCTORS(WebstoreStandaloneInstaller); | 153 DISALLOW_IMPLICIT_CONSTRUCTORS(WebstoreStandaloneInstaller); |
| 154 }; | 154 }; |
| 155 | 155 |
| 156 } // namespace extensions | 156 } // namespace extensions |
| 157 | 157 |
| 158 #endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_STANDALONE_INSTALLER_H_ | 158 #endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_STANDALONE_INSTALLER_H_ |
| OLD | NEW |