Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: chrome/browser/extensions/crx_installer.cc

Issue 11054006: Make application shortcuts point to app_host.exe, install App Host during app installation. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/crx_installer.h" 5 #include "chrome/browser/extensions/crx_installer.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #include "content/public/browser/notification_service.h" 44 #include "content/public/browser/notification_service.h"
45 #include "content/public/browser/resource_dispatcher_host.h" 45 #include "content/public/browser/resource_dispatcher_host.h"
46 #include "content/public/browser/user_metrics.h" 46 #include "content/public/browser/user_metrics.h"
47 #include "grit/chromium_strings.h" 47 #include "grit/chromium_strings.h"
48 #include "grit/generated_resources.h" 48 #include "grit/generated_resources.h"
49 #include "grit/theme_resources.h" 49 #include "grit/theme_resources.h"
50 #include "third_party/skia/include/core/SkBitmap.h" 50 #include "third_party/skia/include/core/SkBitmap.h"
51 #include "ui/base/l10n/l10n_util.h" 51 #include "ui/base/l10n/l10n_util.h"
52 #include "ui/base/resource/resource_bundle.h" 52 #include "ui/base/resource/resource_bundle.h"
53 53
54 #if defined(OS_WIN)
55 #include "chrome/browser/extensions/app_host_installer_win.h"
56 #endif
57
54 using content::BrowserThread; 58 using content::BrowserThread;
55 using content::UserMetricsAction; 59 using content::UserMetricsAction;
56 60
57 namespace extensions { 61 namespace extensions {
58 62
59 namespace { 63 namespace {
60 64
61 // Used in histograms; do not change order. 65 // Used in histograms; do not change order.
62 enum OffStoreInstallDecision { 66 enum OffStoreInstallDecision {
63 OnStoreInstall, 67 OnStoreInstall,
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 Version current_version(current_version_); 505 Version current_version(current_version_);
502 if (current_version.CompareTo(*(extension_->version())) > 0) { 506 if (current_version.CompareTo(*(extension_->version())) > 0) {
503 ReportFailureFromFileThread( 507 ReportFailureFromFileThread(
504 CrxInstallerError( 508 CrxInstallerError(
505 l10n_util::GetStringUTF16(extension_->is_app() ? 509 l10n_util::GetStringUTF16(extension_->is_app() ?
506 IDS_APP_CANT_DOWNGRADE_VERSION : 510 IDS_APP_CANT_DOWNGRADE_VERSION :
507 IDS_EXTENSION_CANT_DOWNGRADE_VERSION))); 511 IDS_EXTENSION_CANT_DOWNGRADE_VERSION)));
508 return; 512 return;
509 } 513 }
510 } 514 }
515 #if defined(OS_WIN)
benwells 2012/10/03 05:08:43 This part of the codebase is platform independent.
huangs 2012/10/03 20:09:47 Done.
516 if (extension_->is_platform_app()) {
517 // Ensures that App Host is present.
518 // Will call CompleteExtensionInstall() after.
519 // TODO(huangs): Should this be Unretained, or not?
520 app_host_installer_.EnsureAppHostPresentAndCall(
521 base::Bind(&CrxInstaller::CompleteExtensionInstall,
522 base::Unretained(this)),
523 base::Bind(&CrxInstaller::OnAppHostInstallFailure,
524 base::Unretained(this)));
525 } else {
526 CompleteExtensionInstall();
527 }
511 528
529 #else
530 CompleteExtensionInstall();
531 #endif
532 }
533
534 void CrxInstaller::CompleteExtensionInstall() {
512 // See how long extension install paths are. This is important on 535 // See how long extension install paths are. This is important on
513 // windows, because file operations may fail if the path to a file 536 // windows, because file operations may fail if the path to a file
514 // exceeds a small constant. See crbug.com/69693 . 537 // exceeds a small constant. See crbug.com/69693 .
515 UMA_HISTOGRAM_CUSTOM_COUNTS( 538 UMA_HISTOGRAM_CUSTOM_COUNTS(
516 "Extensions.CrxInstallDirPathLength", 539 "Extensions.CrxInstallDirPathLength",
517 install_directory_.value().length(), 0, 500, 100); 540 install_directory_.value().length(), 0, 500, 100);
518 541
519 FilePath version_dir = extension_file_util::InstallExtension( 542 FilePath version_dir = extension_file_util::InstallExtension(
520 unpacked_extension_root_, 543 unpacked_extension_root_,
521 extension_->id(), 544 extension_->id(),
(...skipping 24 matching lines...) Expand all
546 569
547 if (extension_) { 570 if (extension_) {
548 ReportSuccessFromFileThread(); 571 ReportSuccessFromFileThread();
549 } else { 572 } else {
550 LOG(ERROR) << error << " " << extension_id << " " << download_url_.spec(); 573 LOG(ERROR) << error << " " << extension_id << " " << download_url_.spec();
551 ReportFailureFromFileThread(CrxInstallerError(UTF8ToUTF16(error))); 574 ReportFailureFromFileThread(CrxInstallerError(UTF8ToUTF16(error)));
552 } 575 }
553 576
554 } 577 }
555 578
579 #if defined(OS_WIN)
580 void CrxInstaller::OnAppHostInstallFailure() {
581 string16 error = L"Some random error message";
benwells 2012/10/03 05:08:43 Ah, you did say work in progress....
huangs 2012/10/03 20:09:47 Yup. I moved this routine.
582 ReportFailureFromFileThread(CrxInstallerError(error));
583 }
584 #endif
585
556 void CrxInstaller::ReportFailureFromFileThread(const CrxInstallerError& error) { 586 void CrxInstaller::ReportFailureFromFileThread(const CrxInstallerError& error) {
557 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 587 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
558 if (!BrowserThread::PostTask( 588 if (!BrowserThread::PostTask(
559 BrowserThread::UI, FROM_HERE, 589 BrowserThread::UI, FROM_HERE,
560 base::Bind(&CrxInstaller::ReportFailureFromUIThread, this, error))) { 590 base::Bind(&CrxInstaller::ReportFailureFromUIThread, this, error))) {
561 NOTREACHED(); 591 NOTREACHED();
562 } 592 }
563 } 593 }
564 594
565 void CrxInstaller::ReportFailureFromUIThread(const CrxInstallerError& error) { 595 void CrxInstaller::ReportFailureFromUIThread(const CrxInstallerError& error) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 // is problematic because they don't know anything about the 681 // is problematic because they don't know anything about the
652 // extension before it is unpacked, so they cannot filter based 682 // extension before it is unpacked, so they cannot filter based
653 // on the extension. 683 // on the extension.
654 content::NotificationService::current()->Notify( 684 content::NotificationService::current()->Notify(
655 chrome::NOTIFICATION_CRX_INSTALLER_DONE, 685 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
656 content::Source<CrxInstaller>(this), 686 content::Source<CrxInstaller>(this),
657 content::Details<const Extension>(extension)); 687 content::Details<const Extension>(extension));
658 } 688 }
659 689
660 } // namespace extensions 690 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698