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 #include "chrome/browser/extensions/webstore_standalone_installer.h" | 5 #include "chrome/browser/extensions/webstore_standalone_installer.h" |
6 | 6 |
7 #include "base/values.h" | 7 #include "base/values.h" |
8 #include "base/version.h" | 8 #include "base/version.h" |
9 #include "chrome/browser/extensions/crx_installer.h" | 9 #include "chrome/browser/extensions/crx_installer.h" |
10 #include "chrome/browser/extensions/extension_install_prompt.h" | 10 #include "chrome/browser/extensions/extension_install_prompt.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 // Add a ref to keep this alive for WebstoreDataFetcher. | 52 // Add a ref to keep this alive for WebstoreDataFetcher. |
53 // All code paths from here eventually lead to either CompleteInstall or | 53 // All code paths from here eventually lead to either CompleteInstall or |
54 // AbortInstall, which both release this ref. | 54 // AbortInstall, which both release this ref. |
55 AddRef(); | 55 AddRef(); |
56 | 56 |
57 if (!Extension::IdIsValid(id_)) { | 57 if (!Extension::IdIsValid(id_)) { |
58 CompleteInstall(webstore_install::INVALID_ID, kInvalidWebstoreItemId); | 58 CompleteInstall(webstore_install::INVALID_ID, kInvalidWebstoreItemId); |
59 return; | 59 return; |
60 } | 60 } |
61 | 61 |
62 webstore_install::Result result = webstore_install::UNKNOWN_ERROR; | 62 webstore_install::Result result = webstore_install::OTHER_ERROR; |
63 std::string error; | 63 std::string error; |
64 if (!EnsureUniqueInstall(&result, &error)) { | 64 if (!EnsureUniqueInstall(&result, &error)) { |
65 CompleteInstall(result, error); | 65 CompleteInstall(result, error); |
66 return; | 66 return; |
67 } | 67 } |
68 | 68 |
69 // Use the requesting page as the referrer both since that is more correct | 69 // Use the requesting page as the referrer both since that is more correct |
70 // (it is the page that caused this request to happen) and so that we can | 70 // (it is the page that caused this request to happen) and so that we can |
71 // track top sites that trigger inline install requests. | 71 // track top sites that trigger inline install requests. |
72 webstore_data_fetcher_.reset(new WebstoreDataFetcher( | 72 webstore_data_fetcher_.reset(new WebstoreDataFetcher( |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 InitInstallData(&install_data); | 117 InitInstallData(&install_data); |
118 scoped_active_install_.reset(new ScopedActiveInstall(tracker, install_data)); | 118 scoped_active_install_.reset(new ScopedActiveInstall(tracker, install_data)); |
119 return true; | 119 return true; |
120 } | 120 } |
121 | 121 |
122 void WebstoreStandaloneInstaller::CompleteInstall( | 122 void WebstoreStandaloneInstaller::CompleteInstall( |
123 webstore_install::Result result, | 123 webstore_install::Result result, |
124 const std::string& error) { | 124 const std::string& error) { |
125 scoped_active_install_.reset(); | 125 scoped_active_install_.reset(); |
126 if (!callback_.is_null()) | 126 if (!callback_.is_null()) |
127 callback_.Run(result == webstore_install::SUCCESS, error); | 127 callback_.Run(result == webstore_install::SUCCESS, error, result); |
128 Release(); // Matches the AddRef in BeginInstall. | 128 Release(); // Matches the AddRef in BeginInstall. |
129 } | 129 } |
130 | 130 |
131 void WebstoreStandaloneInstaller::ProceedWithInstallPrompt() { | 131 void WebstoreStandaloneInstaller::ProceedWithInstallPrompt() { |
132 install_prompt_ = CreateInstallPrompt(); | 132 install_prompt_ = CreateInstallPrompt(); |
133 if (install_prompt_) { | 133 if (install_prompt_) { |
134 ShowInstallUI(); | 134 ShowInstallUI(); |
135 // Control flow finishes up in InstallUIProceed or InstallUIAbort. | 135 // Control flow finishes up in InstallUIProceed or InstallUIAbort. |
136 } else { | 136 } else { |
137 InstallUIProceed(); | 137 InstallUIProceed(); |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 manifest_.reset(manifest); | 299 manifest_.reset(manifest); |
300 icon_ = icon; | 300 icon_ = icon; |
301 | 301 |
302 OnManifestParsed(); | 302 OnManifestParsed(); |
303 } | 303 } |
304 | 304 |
305 void WebstoreStandaloneInstaller::OnWebstoreParseFailure( | 305 void WebstoreStandaloneInstaller::OnWebstoreParseFailure( |
306 const std::string& id, | 306 const std::string& id, |
307 InstallHelperResultCode result_code, | 307 InstallHelperResultCode result_code, |
308 const std::string& error_message) { | 308 const std::string& error_message) { |
309 webstore_install::Result install_result = webstore_install::UNKNOWN_ERROR; | 309 webstore_install::Result install_result = webstore_install::OTHER_ERROR; |
310 switch (result_code) { | 310 switch (result_code) { |
311 case WebstoreInstallHelper::Delegate::MANIFEST_ERROR: | 311 case WebstoreInstallHelper::Delegate::MANIFEST_ERROR: |
312 install_result = webstore_install::INVALID_MANIFEST; | 312 install_result = webstore_install::INVALID_MANIFEST; |
313 break; | 313 break; |
314 case WebstoreInstallHelper::Delegate::ICON_ERROR: | 314 case WebstoreInstallHelper::Delegate::ICON_ERROR: |
315 install_result = webstore_install::ICON_ERROR; | 315 install_result = webstore_install::ICON_ERROR; |
316 break; | 316 break; |
317 default: | 317 default: |
318 break; | 318 break; |
319 } | 319 } |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 CHECK_EQ(id_, id); | 393 CHECK_EQ(id_, id); |
394 CompleteInstall(webstore_install::SUCCESS, std::string()); | 394 CompleteInstall(webstore_install::SUCCESS, std::string()); |
395 } | 395 } |
396 | 396 |
397 void WebstoreStandaloneInstaller::OnExtensionInstallFailure( | 397 void WebstoreStandaloneInstaller::OnExtensionInstallFailure( |
398 const std::string& id, | 398 const std::string& id, |
399 const std::string& error, | 399 const std::string& error, |
400 WebstoreInstaller::FailureReason reason) { | 400 WebstoreInstaller::FailureReason reason) { |
401 CHECK_EQ(id_, id); | 401 CHECK_EQ(id_, id); |
402 | 402 |
403 webstore_install::Result install_result = webstore_install::UNKNOWN_ERROR; | 403 webstore_install::Result install_result = webstore_install::OTHER_ERROR; |
404 switch (reason) { | 404 switch (reason) { |
405 case WebstoreInstaller::FAILURE_REASON_CANCELLED: | 405 case WebstoreInstaller::FAILURE_REASON_CANCELLED: |
406 install_result = webstore_install::USER_CANCELLED; | 406 install_result = webstore_install::USER_CANCELLED; |
407 break; | 407 break; |
408 case WebstoreInstaller::FAILURE_REASON_DEPENDENCY_NOT_FOUND: | 408 case WebstoreInstaller::FAILURE_REASON_DEPENDENCY_NOT_FOUND: |
409 case WebstoreInstaller::FAILURE_REASON_DEPENDENCY_NOT_SHARED_MODULE: | 409 case WebstoreInstaller::FAILURE_REASON_DEPENDENCY_NOT_SHARED_MODULE: |
410 install_result = webstore_install::MISSING_DEPENDENCIES; | 410 install_result = webstore_install::MISSING_DEPENDENCIES; |
411 break; | 411 break; |
412 default: | 412 default: |
413 break; | 413 break; |
(...skipping 17 matching lines...) Expand all Loading... |
431 void WebstoreStandaloneInstaller::OnWebStoreDataFetcherDone() { | 431 void WebstoreStandaloneInstaller::OnWebStoreDataFetcherDone() { |
432 // An instance of this class is passed in as a delegate for the | 432 // An instance of this class is passed in as a delegate for the |
433 // WebstoreInstallHelper, ExtensionInstallPrompt and WebstoreInstaller, and | 433 // WebstoreInstallHelper, ExtensionInstallPrompt and WebstoreInstaller, and |
434 // therefore needs to remain alive until they are done. Clear the webstore | 434 // therefore needs to remain alive until they are done. Clear the webstore |
435 // data fetcher to avoid calling Release in AbortInstall while any of these | 435 // data fetcher to avoid calling Release in AbortInstall while any of these |
436 // operations are in progress. | 436 // operations are in progress. |
437 webstore_data_fetcher_.reset(); | 437 webstore_data_fetcher_.reset(); |
438 } | 438 } |
439 | 439 |
440 } // namespace extensions | 440 } // namespace extensions |
OLD | NEW |