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

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

Issue 6965018: Install CRX updates one at a time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Polish Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
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/extension_service.h" 5 #include "chrome/browser/extensions/extension_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 LoadAllExtensions(); 593 LoadAllExtensions();
594 594
595 // TODO(erikkay) this should probably be deferred to a future point 595 // TODO(erikkay) this should probably be deferred to a future point
596 // rather than running immediately at startup. 596 // rather than running immediately at startup.
597 CheckForExternalUpdates(); 597 CheckForExternalUpdates();
598 598
599 // TODO(erikkay) this should probably be deferred as well. 599 // TODO(erikkay) this should probably be deferred as well.
600 GarbageCollectExtensions(); 600 GarbageCollectExtensions();
601 } 601 }
602 602
603 void ExtensionService::UpdateExtension(const std::string& id, 603 bool ExtensionService::UpdateExtension(
604 const FilePath& extension_path, 604 const std::string& id,
605 const GURL& download_url) { 605 const FilePath& extension_path,
606 const GURL& download_url,
607 CrxInstaller** out_crx_installer) {
606 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 608 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
607 609
608 PendingExtensionInfo pending_extension_info; 610 PendingExtensionInfo pending_extension_info;
609 bool is_pending_extension = pending_extension_manager_.GetById( 611 bool is_pending_extension = pending_extension_manager_.GetById(
610 id, &pending_extension_info); 612 id, &pending_extension_info);
611 613
612 const Extension* extension = 614 const Extension* extension =
613 GetExtensionByIdInternal(id, true, true, false); 615 GetExtensionByIdInternal(id, true, true, false);
614 if (!is_pending_extension && !extension) { 616 if (!is_pending_extension && !extension) {
615 LOG(WARNING) << "Will not update extension " << id 617 LOG(WARNING) << "Will not update extension " << id
616 << " because it is not installed or pending"; 618 << " because it is not installed or pending";
617 // Delete extension_path since we're not creating a CrxInstaller 619 // Delete extension_path since we're not creating a CrxInstaller
618 // that would do it for us. 620 // that would do it for us.
619 if (!BrowserThread::PostTask( 621 if (!BrowserThread::PostTask(
620 BrowserThread::FILE, FROM_HERE, 622 BrowserThread::FILE, FROM_HERE,
621 NewRunnableFunction( 623 NewRunnableFunction(
622 extension_file_util::DeleteFile, extension_path, false))) 624 extension_file_util::DeleteFile, extension_path, false)))
623 NOTREACHED(); 625 NOTREACHED();
624 return; 626
627 return false;
625 } 628 }
626 629
627 // We want a silent install only for non-pending extensions and 630 // We want a silent install only for non-pending extensions and
628 // pending extensions that have install_silently set. 631 // pending extensions that have install_silently set.
629 ExtensionInstallUI* client = 632 ExtensionInstallUI* client =
630 (!is_pending_extension || pending_extension_info.install_silently()) ? 633 (!is_pending_extension || pending_extension_info.install_silently()) ?
631 NULL : new ExtensionInstallUI(profile_); 634 NULL : new ExtensionInstallUI(profile_);
632 635
633 scoped_refptr<CrxInstaller> installer(MakeCrxInstaller(client)); 636 scoped_refptr<CrxInstaller> installer(MakeCrxInstaller(client));
634 installer->set_expected_id(id); 637 installer->set_expected_id(id);
635 if (is_pending_extension) 638 if (is_pending_extension)
636 installer->set_install_source(pending_extension_info.install_source()); 639 installer->set_install_source(pending_extension_info.install_source());
637 else if (extension) 640 else if (extension)
638 installer->set_install_source(extension->location()); 641 installer->set_install_source(extension->location());
639 installer->set_delete_source(true); 642 installer->set_delete_source(true);
640 installer->set_original_url(download_url); 643 installer->set_original_url(download_url);
641 installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE); 644 installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE);
642 installer->InstallCrx(extension_path); 645 installer->InstallCrx(extension_path);
646
647 if (out_crx_installer)
648 *out_crx_installer = installer;
649
650 return true;
643 } 651 }
644 652
645 void ExtensionService::ReloadExtension(const std::string& extension_id) { 653 void ExtensionService::ReloadExtension(const std::string& extension_id) {
646 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 654 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
647 FilePath path; 655 FilePath path;
648 const Extension* current_extension = GetExtensionById(extension_id, false); 656 const Extension* current_extension = GetExtensionById(extension_id, false);
649 657
650 // Disable the extension if it's loaded. It might not be loaded if it crashed. 658 // Disable the extension if it's loaded. It might not be loaded if it crashed.
651 if (current_extension) { 659 if (current_extension) {
652 // If the extension has an inspector open for its background page, detach 660 // If the extension has an inspector open for its background page, detach
(...skipping 1602 matching lines...) Expand 10 before | Expand all | Expand 10 after
2255 2263
2256 ExtensionService::NaClModuleInfoList::iterator 2264 ExtensionService::NaClModuleInfoList::iterator
2257 ExtensionService::FindNaClModule(const GURL& url) { 2265 ExtensionService::FindNaClModule(const GURL& url) {
2258 for (NaClModuleInfoList::iterator iter = nacl_module_list_.begin(); 2266 for (NaClModuleInfoList::iterator iter = nacl_module_list_.begin();
2259 iter != nacl_module_list_.end(); ++iter) { 2267 iter != nacl_module_list_.end(); ++iter) {
2260 if (iter->url == url) 2268 if (iter->url == url)
2261 return iter; 2269 return iter;
2262 } 2270 }
2263 return nacl_module_list_.end(); 2271 return nacl_module_list_.end();
2264 } 2272 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.h ('k') | chrome/browser/extensions/extension_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698