| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_inline_installer.h" | 5 #include "chrome/browser/extensions/webstore_inline_installer.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 CompleteInstall(kNotFromVerifiedSiteError); | 299 CompleteInstall(kNotFromVerifiedSiteError); |
| 300 return; | 300 return; |
| 301 } | 301 } |
| 302 } else { | 302 } else { |
| 303 CompleteInstall(kNoVerifiedSiteError); | 303 CompleteInstall(kNoVerifiedSiteError); |
| 304 return; | 304 return; |
| 305 } | 305 } |
| 306 | 306 |
| 307 scoped_refptr<WebstoreInstallHelper> helper = new WebstoreInstallHelper( | 307 scoped_refptr<WebstoreInstallHelper> helper = new WebstoreInstallHelper( |
| 308 this, | 308 this, |
| 309 id_, |
| 309 manifest, | 310 manifest, |
| 310 "", // We don't have any icon data. | 311 "", // We don't have any icon data. |
| 311 icon_url, | 312 icon_url, |
| 312 Profile::FromBrowserContext(tab_contents()->browser_context())-> | 313 Profile::FromBrowserContext(tab_contents()->browser_context())-> |
| 313 GetRequestContext()); | 314 GetRequestContext()); |
| 314 // The helper will call us back via OnWebstoreParseSucces or | 315 // The helper will call us back via OnWebstoreParseSucces or |
| 315 // OnWebstoreParseFailure. | 316 // OnWebstoreParseFailure. |
| 316 helper->Start(); | 317 helper->Start(); |
| 317 } | 318 } |
| 318 | 319 |
| 319 void WebstoreInlineInstaller::OnWebstoreResponseParseFailure( | 320 void WebstoreInlineInstaller::OnWebstoreResponseParseFailure( |
| 320 const std::string& error) { | 321 const std::string& error) { |
| 321 CompleteInstall(error); | 322 CompleteInstall(error); |
| 322 } | 323 } |
| 323 | 324 |
| 324 void WebstoreInlineInstaller::OnWebstoreParseSuccess( | 325 void WebstoreInlineInstaller::OnWebstoreParseSuccess( |
| 326 const std::string& id, |
| 325 const SkBitmap& icon, | 327 const SkBitmap& icon, |
| 326 base::DictionaryValue* manifest) { | 328 base::DictionaryValue* manifest) { |
| 327 // Check if the tab has gone away in the meantime. | 329 // Check if the tab has gone away in the meantime. |
| 328 if (!tab_contents()) { | 330 if (!tab_contents()) { |
| 329 CompleteInstall(""); | 331 CompleteInstall(""); |
| 330 return; | 332 return; |
| 331 } | 333 } |
| 332 | 334 |
| 335 CHECK_EQ(id_, id); |
| 333 manifest_.reset(manifest); | 336 manifest_.reset(manifest); |
| 334 icon_ = icon; | 337 icon_ = icon; |
| 335 | 338 |
| 336 Profile* profile = Profile::FromBrowserContext( | 339 Profile* profile = Profile::FromBrowserContext( |
| 337 tab_contents()->browser_context()); | 340 tab_contents()->browser_context()); |
| 338 | 341 |
| 339 ExtensionInstallUI::Prompt prompt(ExtensionInstallUI::INLINE_INSTALL_PROMPT); | 342 ExtensionInstallUI::Prompt prompt(ExtensionInstallUI::INLINE_INSTALL_PROMPT); |
| 340 prompt.SetInlineInstallWebstoreData(localized_user_count_, | 343 prompt.SetInlineInstallWebstoreData(localized_user_count_, |
| 341 average_rating_, | 344 average_rating_, |
| 342 rating_count_); | 345 rating_count_); |
| 343 | 346 |
| 344 if (!ShowExtensionInstallDialogForManifest(profile, | 347 if (!ShowExtensionInstallDialogForManifest(profile, |
| 345 this, | 348 this, |
| 346 manifest, | 349 manifest, |
| 347 id_, | 350 id_, |
| 348 localized_name_, | 351 localized_name_, |
| 349 localized_description_, | 352 localized_description_, |
| 350 &icon_, | 353 &icon_, |
| 351 prompt, | 354 prompt, |
| 352 &dummy_extension_)) { | 355 &dummy_extension_)) { |
| 353 CompleteInstall(kInvalidManifestError); | 356 CompleteInstall(kInvalidManifestError); |
| 354 return; | 357 return; |
| 355 } | 358 } |
| 356 | 359 |
| 357 // Control flow finishes up in InstallUIProceed or InstallUIAbort. | 360 // Control flow finishes up in InstallUIProceed or InstallUIAbort. |
| 358 } | 361 } |
| 359 | 362 |
| 360 void WebstoreInlineInstaller::OnWebstoreParseFailure( | 363 void WebstoreInlineInstaller::OnWebstoreParseFailure( |
| 364 const std::string& id, |
| 361 InstallHelperResultCode result_code, | 365 InstallHelperResultCode result_code, |
| 362 const std::string& error_message) { | 366 const std::string& error_message) { |
| 363 CompleteInstall(error_message); | 367 CompleteInstall(error_message); |
| 364 } | 368 } |
| 365 | 369 |
| 366 void WebstoreInlineInstaller::InstallUIProceed() { | 370 void WebstoreInlineInstaller::InstallUIProceed() { |
| 367 // Check if the tab has gone away in the meantime. | 371 // Check if the tab has gone away in the meantime. |
| 368 if (!tab_contents()) { | 372 if (!tab_contents()) { |
| 369 CompleteInstall(""); | 373 CompleteInstall(""); |
| 370 return; | 374 return; |
| 371 } | 375 } |
| 372 | 376 |
| 373 CrxInstaller::WhitelistEntry* entry = new CrxInstaller::WhitelistEntry; | 377 CrxInstaller::WhitelistEntry* entry = new CrxInstaller::WhitelistEntry; |
| 374 | 378 |
| 375 entry->parsed_manifest.reset(manifest_.get()->DeepCopy()); | 379 entry->parsed_manifest.reset(manifest_.get()->DeepCopy()); |
| 376 entry->localized_name = localized_name_; | 380 entry->localized_name = localized_name_; |
| 377 entry->use_app_installed_bubble = true; | 381 entry->use_app_installed_bubble = true; |
| 378 CrxInstaller::SetWhitelistEntry(id_, entry); | 382 CrxInstaller::SetWhitelistEntry(id_, entry); |
| 379 | 383 |
| 380 Profile* profile = Profile::FromBrowserContext( | 384 Profile* profile = Profile::FromBrowserContext( |
| 381 tab_contents()->browser_context()); | 385 tab_contents()->browser_context()); |
| 382 | 386 |
| 383 WebstoreInstaller* installer = | 387 scoped_refptr<WebstoreInstaller> installer = new WebstoreInstaller( |
| 384 profile->GetExtensionService()->webstore_installer(); | 388 profile, this, &(tab_contents()->controller()), id_, |
| 385 installer->InstallExtension( | 389 WebstoreInstaller::FLAG_INLINE_INSTALL); |
| 386 id_, this, WebstoreInstaller::FLAG_INLINE_INSTALL); | 390 installer->Start(); |
| 387 } | 391 } |
| 388 | 392 |
| 389 void WebstoreInlineInstaller::InstallUIAbort(bool user_initiated) { | 393 void WebstoreInlineInstaller::InstallUIAbort(bool user_initiated) { |
| 390 CompleteInstall(kUserCancelledError); | 394 CompleteInstall(kUserCancelledError); |
| 391 } | 395 } |
| 392 | 396 |
| 393 void WebstoreInlineInstaller::TabContentsDestroyed(TabContents* tab_contents) { | 397 void WebstoreInlineInstaller::TabContentsDestroyed(TabContents* tab_contents) { |
| 394 // Abort any in-progress fetches. | 398 // Abort any in-progress fetches. |
| 395 if (webstore_data_url_fetcher_.get()) { | 399 if (webstore_data_url_fetcher_.get()) { |
| 396 webstore_data_url_fetcher_.reset(); | 400 webstore_data_url_fetcher_.reset(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 415 if (tab_contents()) { | 419 if (tab_contents()) { |
| 416 if (error.empty()) { | 420 if (error.empty()) { |
| 417 delegate_->OnInlineInstallSuccess(install_id_); | 421 delegate_->OnInlineInstallSuccess(install_id_); |
| 418 } else { | 422 } else { |
| 419 delegate_->OnInlineInstallFailure(install_id_, error); | 423 delegate_->OnInlineInstallFailure(install_id_, error); |
| 420 } | 424 } |
| 421 } | 425 } |
| 422 | 426 |
| 423 Release(); // Matches the AddRef in BeginInstall. | 427 Release(); // Matches the AddRef in BeginInstall. |
| 424 } | 428 } |
| OLD | NEW |