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

Unified Diff: chrome/browser/component_updater/pepper_flash_component_installer.cc

Issue 2041573002: Refactor flash component installer to use DefaultComponentInstaller. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/component_updater/pepper_flash_component_installer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/component_updater/pepper_flash_component_installer.cc
diff --git a/chrome/browser/component_updater/pepper_flash_component_installer.cc b/chrome/browser/component_updater/pepper_flash_component_installer.cc
index cae975d5861e0411d1d0fe2877943522e0f8f803..068f54164994ab18fc168e1bdeff91b5fef6e756 100644
--- a/chrome/browser/component_updater/pepper_flash_component_installer.cc
+++ b/chrome/browser/component_updater/pepper_flash_component_installer.cc
@@ -32,6 +32,7 @@
#include "chrome/common/pepper_flash.h"
#include "chrome/common/ppapi_utils.h"
#include "components/component_updater/component_updater_service.h"
+#include "components/component_updater/default_component_installer.h"
#include "components/update_client/update_client.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/plugin_service.h"
@@ -57,53 +58,9 @@ const uint8_t kSha2Hash[] = {0xc8, 0xce, 0x99, 0xba, 0xce, 0x89, 0xf8, 0x20,
0xac, 0xd3, 0x7e, 0x86, 0x8c, 0x86, 0x2c, 0x11,
0xb9, 0x40, 0xc5, 0x55, 0xaf, 0x08, 0x63, 0x70,
0x54, 0xf9, 0x56, 0xd3, 0xe7, 0x88, 0xba, 0x8c};
-
-// If we don't have a Pepper Flash component, this is the version we claim.
-const char kNullVersion[] = "0.0.0.0";
-
-// Pepper Flash plugins have the version encoded in the path itself
-// so we need to enumerate the directories to find the full path.
-// On success, |latest_dir| returns something like:
-// <profile>\AppData\Local\Google\Chrome\User Data\PepperFlash\10.3.44.555\.
-// |latest_version| returns the corresponding version number. |older_dirs|
-// returns directories of all older versions.
-bool GetPepperFlashDirectory(base::FilePath* latest_dir,
- Version* latest_version,
- std::vector<base::FilePath>* older_dirs) {
- DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- base::FilePath base_dir;
- if (!PathService::Get(chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN,
- &base_dir)) {
- return false;
- }
-
- bool found = false;
- base::FileEnumerator file_enumerator(
- base_dir, false, base::FileEnumerator::DIRECTORIES);
- for (base::FilePath path = file_enumerator.Next(); !path.value().empty();
- path = file_enumerator.Next()) {
- Version version(path.BaseName().MaybeAsASCII());
- if (!version.IsValid())
- continue;
- if (found) {
- if (version.CompareTo(*latest_version) > 0) {
- older_dirs->push_back(*latest_dir);
- *latest_dir = path;
- *latest_version = version;
- } else {
- older_dirs->push_back(path);
- }
- } else {
- *latest_dir = path;
- *latest_version = version;
- found = true;
- }
- }
- return found;
-}
#endif // defined(GOOGLE_CHROME_BUILD)
-#if !defined(OS_LINUX) || defined(GOOGLE_CHROME_BUILD)
+#if !defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD)
bool MakePepperFlashPluginInfo(const base::FilePath& flash_path,
const Version& flash_version,
bool out_of_process,
@@ -205,193 +162,99 @@ void RegisterPepperFlashWithChrome(const base::FilePath& path,
plugin_info.ToWebPluginInfo(), true);
PluginService::GetInstance()->RefreshPlugins();
}
-#endif // !defined(OS_LINUX) || defined(GOOGLE_CHROME_BUILD)
+#endif // !defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD)
-} // namespace
-
-class PepperFlashComponentInstaller : public update_client::CrxInstaller {
+#if defined(GOOGLE_CHROME_BUILD)
+class FlashComponentInstallerTraits : public ComponentInstallerTraits {
public:
- explicit PepperFlashComponentInstaller(const Version& version);
-
- // ComponentInstaller implementation:
- void OnUpdateError(int error) override;
-
- bool Install(const base::DictionaryValue& manifest,
- const base::FilePath& unpack_path) override;
-
- bool GetInstalledFile(const std::string& file,
- base::FilePath* installed_file) override;
-
- bool Uninstall() override;
+ FlashComponentInstallerTraits();
+ ~FlashComponentInstallerTraits() override {}
private:
- ~PepperFlashComponentInstaller() override {}
-
- Version current_version_;
+ // The following methods override ComponentInstallerTraits.
+ bool CanAutoUpdate() const override;
+ bool RequiresNetworkEncryption() const override;
+ bool OnCustomInstall(const base::DictionaryValue& manifest,
+ const base::FilePath& install_dir) override;
+ bool VerifyInstallation(const base::DictionaryValue& manifest,
+ const base::FilePath& install_dir) const override;
+ void ComponentReady(const base::Version& version,
+ const base::FilePath& path,
+ std::unique_ptr<base::DictionaryValue> manifest) override;
+ base::FilePath GetRelativeInstallDir() const override;
+ void GetHash(std::vector<uint8_t>* hash) const override;
+ std::string GetName() const override;
+ std::string GetAp() const override;
+
+ DISALLOW_COPY_AND_ASSIGN(FlashComponentInstallerTraits);
};
-PepperFlashComponentInstaller::PepperFlashComponentInstaller(
- const Version& version)
- : current_version_(version) {
- DCHECK(version.IsValid());
+FlashComponentInstallerTraits::FlashComponentInstallerTraits() {}
+
+bool FlashComponentInstallerTraits::CanAutoUpdate() const {
+ return true;
}
-void PepperFlashComponentInstaller::OnUpdateError(int error) {
- NOTREACHED() << "Pepper Flash update error: " << error;
+bool FlashComponentInstallerTraits::RequiresNetworkEncryption() const {
+ return false;
}
-bool PepperFlashComponentInstaller::Install(
+bool FlashComponentInstallerTraits::OnCustomInstall(
const base::DictionaryValue& manifest,
- const base::FilePath& unpack_path) {
- Version version;
- if (!chrome::CheckPepperFlashManifest(manifest, &version))
- return false;
- if (current_version_.CompareTo(version) > 0)
- return false;
- const base::FilePath unpacked_plugin =
- unpack_path.Append(chrome::kPepperFlashPluginFilename);
- if (!base::PathExists(unpacked_plugin))
- return false;
- // Passed the basic tests. Time to install it.
- base::FilePath path;
- if (!PathService::Get(chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN,
- &path)) {
- return false;
- }
- path = path.AppendASCII(version.GetString());
- if (base::PathExists(path))
- return false;
- current_version_ = version;
-
- if (!base::Move(unpack_path, path))
- return false;
+ const base::FilePath& install_dir) {
#if defined(OS_LINUX)
Greg K 2016/06/06 19:08:37 I notice it's no longer unpacking the plugin here.
waffles 2016/06/06 19:37:03 Yes, Install took the temp directory that the expl
Greg K 2016/06/06 20:43:06 That might be a problem on Chrome OS where the tem
const base::FilePath flash_path =
- path.Append(chrome::kPepperFlashPluginFilename);
+ install_dir.Append(chrome::kPepperFlashPluginFilename);
// Populate the component updated flash hint file so that the zygote can
// locate and preload the latest version of flash.
+ std::string version;
+ if (!manifest.GetString("version", &version))
+ return false;
if (!component_flash_hint_file::RecordFlashUpdate(flash_path, flash_path,
- version.GetString())) {
- if (!base::DeleteFile(path, true))
- LOG(ERROR) << "Hint file creation failed, but unable to delete "
- "installed flash plugin.";
+ version)) {
return false;
}
-#else
+#endif // defined(OS_LINUX)
+ return true;
+}
+
+void FlashComponentInstallerTraits::ComponentReady(
+ const base::Version& version,
+ const base::FilePath& path,
+ std::unique_ptr<base::DictionaryValue> manifest) {
+#if !defined(OS_LINUX)
// Installation is done. Now tell the rest of chrome. Both the path service
// and to the plugin service. On Linux, a restart is required to use the new
// Flash version, so we do not do this.
PathService::Override(chrome::DIR_PEPPER_FLASH_PLUGIN, path);
path = path.Append(chrome::kPepperFlashPluginFilename);
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&RegisterPepperFlashWithChrome, path, version));
+ RegisterPepperFlashWithChrome(path, version);
#endif // !defined(OS_LINUX)
- return true;
}
-bool PepperFlashComponentInstaller::GetInstalledFile(
- const std::string& file,
- base::FilePath* installed_file) {
- return false;
+bool FlashComponentInstallerTraits::VerifyInstallation(
+ const base::DictionaryValue& manifest,
+ const base::FilePath& install_dir) const {
+ Version unused;
Sorin Jianu 2016/06/03 23:41:44 why is this variable named |unused| ?
waffles 2016/06/06 19:37:03 It's an outparam of CheckPepperFlashManifest, but
+ return chrome::CheckPepperFlashManifest(manifest, &unused);
}
-bool PepperFlashComponentInstaller::Uninstall() {
- return false;
+// The base directory on Windows looks like:
+// <profile>\AppData\Local\Google\Chrome\User Data\PepperFlash\.
+base::FilePath FlashComponentInstallerTraits::GetRelativeInstallDir() const {
+ return base::FilePath(FILE_PATH_LITERAL("PepperFlash"));
}
-
-
-namespace {
-
-#if defined(GOOGLE_CHROME_BUILD)
-void FinishPepperFlashUpdateRegistration(ComponentUpdateService* cus,
- const Version& version) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- update_client::CrxComponent pepflash;
- pepflash.name = "pepper_flash";
- pepflash.installer = new PepperFlashComponentInstaller(version);
- pepflash.version = version;
- pepflash.pk_hash.assign(kSha2Hash, &kSha2Hash[sizeof(kSha2Hash)]);
- if (!cus->RegisterComponent(pepflash))
- NOTREACHED() << "Pepper Flash component registration failed.";
+void FlashComponentInstallerTraits::GetHash(std::vector<uint8_t>* hash) const {
+ hash->assign(kSha2Hash, kSha2Hash + arraysize(kSha2Hash));
}
-bool ValidatePepperFlashManifest(const base::FilePath& path) {
- base::FilePath manifest_path(path.DirName().AppendASCII("manifest.json"));
-
- std::string manifest_data;
- if (!base::ReadFileToString(manifest_path, &manifest_data))
- return false;
- std::unique_ptr<base::Value> manifest_value(
- base::JSONReader::Read(manifest_data, base::JSON_ALLOW_TRAILING_COMMAS));
- if (!manifest_value.get())
- return false;
- base::DictionaryValue* manifest = NULL;
- if (!manifest_value->GetAsDictionary(&manifest))
- return false;
- Version version;
- if (!chrome::CheckPepperFlashManifest(*manifest, &version))
- return false;
- return true;
+std::string FlashComponentInstallerTraits::GetName() const {
+ return "pepper_flash";
}
-void StartPepperFlashUpdateRegistration(ComponentUpdateService* cus) {
- DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- base::FilePath path;
- if (!PathService::Get(chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN,
- &path)) {
- return;
- }
-
- if (!base::PathExists(path)) {
- if (!base::CreateDirectory(path)) {
- NOTREACHED() << "Could not create Pepper Flash directory.";
- return;
- }
- }
-
- Version version(kNullVersion);
- std::vector<base::FilePath> older_dirs;
- if (GetPepperFlashDirectory(&path, &version, &older_dirs)) {
- path = path.Append(chrome::kPepperFlashPluginFilename);
- if (base::PathExists(path)) {
- // Only register component pepper flash if it validates manifest check.
- if (ValidatePepperFlashManifest(path)) {
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&RegisterPepperFlashWithChrome, path, version));
- } else {
- // Queue this version to be deleted.
- older_dirs.push_back(path.DirName());
- version = Version(kNullVersion);
- }
- } else {
- version = Version(kNullVersion);
- }
- }
-
-#if defined(FLAPPER_AVAILABLE)
- // If a version of Flash is bundled with Chrome, and it's a higher version
- // than the version of the component, or the component has never been updated,
- // then set the bundled version as the current version.
- if (version.CompareTo(Version(FLAPPER_VERSION_STRING)) < 0)
- version = Version(FLAPPER_VERSION_STRING);
-#endif
-
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&FinishPepperFlashUpdateRegistration, cus, version));
-
- // Remove older versions of Pepper Flash.
- for (std::vector<base::FilePath>::iterator iter = older_dirs.begin();
- iter != older_dirs.end();
- ++iter) {
- base::DeleteFile(*iter, true);
- }
+std::string FlashComponentInstallerTraits::GetAp() const {
+ return std::string();
}
#endif // defined(GOOGLE_CHROME_BUILD)
@@ -404,9 +267,12 @@ void RegisterPepperFlashComponent(ComponentUpdateService* cus) {
base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
if (cmd_line->HasSwitch(switches::kDisableBundledPpapiFlash))
return;
- BrowserThread::PostTask(BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&StartPepperFlashUpdateRegistration, cus));
+ std::unique_ptr<ComponentInstallerTraits> traits(
+ new FlashComponentInstallerTraits);
+ // |cus| will take ownership of |installer| during installer->Register(cus).
+ DefaultComponentInstaller* installer =
+ new DefaultComponentInstaller(std::move(traits));
+ installer->Register(cus, base::Closure());
#endif // defined(GOOGLE_CHROME_BUILD)
}
« no previous file with comments | « chrome/browser/component_updater/pepper_flash_component_installer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698