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

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

Issue 829583002: Validate hash_sha256 checksum on .crx update. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix histogram value. Created 5 years, 10 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 <iterator> 8 #include <iterator>
9 #include <set> 9 #include <set>
10 10
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 it != all_extensions->end(); ++it) { 467 it != all_extensions->end(); ++it) {
468 extensions::BlacklistState state = 468 extensions::BlacklistState state =
469 extension_prefs_->GetExtensionBlacklistState((*it)->id()); 469 extension_prefs_->GetExtensionBlacklistState((*it)->id());
470 if (state == extensions::BLACKLISTED_SECURITY_VULNERABILITY || 470 if (state == extensions::BLACKLISTED_SECURITY_VULNERABILITY ||
471 state == extensions::BLACKLISTED_POTENTIALLY_UNWANTED || 471 state == extensions::BLACKLISTED_POTENTIALLY_UNWANTED ||
472 state == extensions::BLACKLISTED_CWS_POLICY_VIOLATION) 472 state == extensions::BLACKLISTED_CWS_POLICY_VIOLATION)
473 greylist_.Insert(*it); 473 greylist_.Insert(*it);
474 } 474 }
475 } 475 }
476 476
477 bool ExtensionService::UpdateExtension(const std::string& id, 477 bool ExtensionService::UpdateExtension(const extensions::CRXFileInfo& file,
478 const base::FilePath& extension_path,
479 bool file_ownership_passed, 478 bool file_ownership_passed,
480 CrxInstaller** out_crx_installer) { 479 CrxInstaller** out_crx_installer) {
481 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 480 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
482 if (browser_terminating_) { 481 if (browser_terminating_) {
483 LOG(WARNING) << "Skipping UpdateExtension due to browser shutdown"; 482 LOG(WARNING) << "Skipping UpdateExtension due to browser shutdown";
484 // Leak the temp file at extension_path. We don't want to add to the disk 483 // Leak the temp file at extension_path. We don't want to add to the disk
485 // I/O burden at shutdown, we can't rely on the I/O completing anyway, and 484 // I/O burden at shutdown, we can't rely on the I/O completing anyway, and
486 // the file is in the OS temp directory which should be cleaned up for us. 485 // the file is in the OS temp directory which should be cleaned up for us.
487 return false; 486 return false;
488 } 487 }
489 488
489 const std::string& id = file.extension_id;
490
490 const extensions::PendingExtensionInfo* pending_extension_info = 491 const extensions::PendingExtensionInfo* pending_extension_info =
491 pending_extension_manager()->GetById(id); 492 pending_extension_manager()->GetById(id);
492 493
493 const Extension* extension = GetInstalledExtension(id); 494 const Extension* extension = GetInstalledExtension(id);
494 if (!pending_extension_info && !extension) { 495 if (!pending_extension_info && !extension) {
495 LOG(WARNING) << "Will not update extension " << id 496 LOG(WARNING) << "Will not update extension " << id
496 << " because it is not installed or pending"; 497 << " because it is not installed or pending";
497 // Delete extension_path since we're not creating a CrxInstaller 498 // Delete extension_path since we're not creating a CrxInstaller
498 // that would do it for us. 499 // that would do it for us.
499 if (!GetFileTaskRunner()->PostTask( 500 if (!GetFileTaskRunner()->PostTask(
500 FROM_HERE, 501 FROM_HERE,
501 base::Bind( 502 base::Bind(&extensions::file_util::DeleteFile, file.path, false)))
502 &extensions::file_util::DeleteFile, extension_path, false)))
503 NOTREACHED(); 503 NOTREACHED();
504 504
505 return false; 505 return false;
506 } 506 }
507 507
508 scoped_refptr<CrxInstaller> installer( 508 scoped_refptr<CrxInstaller> installer(
509 CrxInstaller::Create(this, scoped_ptr<ExtensionInstallPrompt>())); 509 CrxInstaller::Create(this, scoped_ptr<ExtensionInstallPrompt>()));
510 installer->set_expected_id(id); 510 installer->set_expected_id(id);
511 int creation_flags = Extension::NO_FLAGS; 511 int creation_flags = Extension::NO_FLAGS;
512 if (pending_extension_info) { 512 if (pending_extension_info) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 550
551 if (extension) { 551 if (extension) {
552 installer->set_is_ephemeral(extension_prefs_->IsEphemeralApp(id)); 552 installer->set_is_ephemeral(extension_prefs_->IsEphemeralApp(id));
553 installer->set_do_not_sync(extension_prefs_->DoNotSync(id)); 553 installer->set_do_not_sync(extension_prefs_->DoNotSync(id));
554 } 554 }
555 555
556 installer->set_creation_flags(creation_flags); 556 installer->set_creation_flags(creation_flags);
557 557
558 installer->set_delete_source(file_ownership_passed); 558 installer->set_delete_source(file_ownership_passed);
559 installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE); 559 installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE);
560 installer->InstallCrx(extension_path); 560 installer->InstallCrxFile(file);
561 561
562 if (out_crx_installer) 562 if (out_crx_installer)
563 *out_crx_installer = installer.get(); 563 *out_crx_installer = installer.get();
564 564
565 return true; 565 return true;
566 } 566 }
567 567
568 void ExtensionService::ReloadExtensionImpl( 568 void ExtensionService::ReloadExtensionImpl(
569 // "transient" because the process of reloading may cause the reference 569 // "transient" because the process of reloading may cause the reference
570 // to become invalid. Instead, use |extension_id|, a copy. 570 // to become invalid. Instead, use |extension_id|, a copy.
(...skipping 1973 matching lines...) Expand 10 before | Expand all | Expand 10 after
2544 } 2544 }
2545 2545
2546 void ExtensionService::OnProfileDestructionStarted() { 2546 void ExtensionService::OnProfileDestructionStarted() {
2547 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs(); 2547 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs();
2548 for (ExtensionIdSet::iterator it = ids_to_unload.begin(); 2548 for (ExtensionIdSet::iterator it = ids_to_unload.begin();
2549 it != ids_to_unload.end(); 2549 it != ids_to_unload.end();
2550 ++it) { 2550 ++it) {
2551 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN); 2551 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN);
2552 } 2552 }
2553 } 2553 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698