Index: chrome/browser/component_updater/swiftshader_component_installer.cc |
diff --git a/chrome/browser/component_updater/swiftshader_component_installer.cc b/chrome/browser/component_updater/swiftshader_component_installer.cc |
deleted file mode 100644 |
index 544756eec6470dfced4d516b6eb774322a16b8bc..0000000000000000000000000000000000000000 |
--- a/chrome/browser/component_updater/swiftshader_component_installer.cc |
+++ /dev/null |
@@ -1,284 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/component_updater/swiftshader_component_installer.h" |
- |
-#include <stdint.h> |
-#include <string> |
-#include <vector> |
- |
-#include "base/base_paths.h" |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/files/file_enumerator.h" |
-#include "base/files/file_path.h" |
-#include "base/files/file_util.h" |
-#include "base/logging.h" |
-#include "base/path_service.h" |
-#include "base/strings/string_util.h" |
-#include "base/values.h" |
-#include "build/build_config.h" |
-#include "components/component_updater/component_updater_paths.h" |
-#include "components/component_updater/component_updater_service.h" |
-#include "components/update_client/update_client.h" |
-#include "components/update_client/utils.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/gpu_data_manager.h" |
-#include "content/public/browser/gpu_data_manager_observer.h" |
-#include "gpu/config/gpu_feature_type.h" |
-#include "ui/gl/gl_features.h" |
- |
-using content::BrowserThread; |
-using content::GpuDataManager; |
- |
-namespace component_updater { |
- |
-namespace { |
- |
-// CRX hash. The extension id is: nhfgdggnnopgbfdlpeoalgcjdgfafocg. |
-const uint8_t kSha2Hash[] = {0xd7, 0x56, 0x36, 0x6d, 0xde, 0xf6, 0x15, 0x3b, |
- 0xf4, 0xe0, 0xb6, 0x29, 0x36, 0x50, 0x5e, 0x26, |
- 0xbd, 0x77, 0x8b, 0x8e, 0x35, 0xc2, 0x7e, 0x43, |
- 0x52, 0x47, 0x62, 0xed, 0x12, 0xca, 0xcc, 0x6a}; |
- |
-// File name of the internal SwiftShader plugin on different platforms. |
-const base::FilePath::CharType kSwiftShaderEglName[] = |
- FILE_PATH_LITERAL("libegl.dll"); |
-const base::FilePath::CharType kSwiftShaderGlesName[] = |
- FILE_PATH_LITERAL("libglesv2.dll"); |
- |
-const char kSwiftShaderManifestName[] = "SwiftShader"; |
- |
-// If we don't have a SwiftShader component, this is the version we claim. |
-const char kNullVersion[] = "0.0.0.0"; |
- |
-// The base directory on windows looks like: |
-// <profile>\AppData\Local\Google\Chrome\User Data\SwiftShader\. |
-base::FilePath GetSwiftShaderBaseDirectory() { |
- base::FilePath result; |
- if (!PathService::Get(DIR_SWIFT_SHADER, &result)) |
- NOTREACHED() << "Couldn't get SwiftShader directory."; |
- return result; |
-} |
- |
-// SwiftShader has version encoded in the path itself |
-// so we need to enumerate the directories to find the full path. |
-// On success it returns something like: |
-// <profile>\AppData\Local\Google\Chrome\User Data\SwiftShader\10.3.44.555\. |
-bool GetLatestSwiftShaderDirectory(base::FilePath* result, |
- base::Version* latest, |
- std::vector<base::FilePath>* older_dirs) { |
- base::FilePath base_dir = GetSwiftShaderBaseDirectory(); |
- 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()) { |
- base::Version version(path.BaseName().MaybeAsASCII()); |
- if (!version.IsValid()) |
- continue; |
- if (version.CompareTo(*latest) > 0 && |
- base::PathExists(path.Append(kSwiftShaderEglName)) && |
- base::PathExists(path.Append(kSwiftShaderGlesName))) { |
- if (found && older_dirs) |
- older_dirs->push_back(*result); |
- *latest = version; |
- *result = path; |
- found = true; |
- } else { |
- if (older_dirs) |
- older_dirs->push_back(path); |
- } |
- } |
- return found; |
-} |
- |
-void RegisterSwiftShaderWithChrome(const base::FilePath& path) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- GpuDataManager::GetInstance()->RegisterSwiftShaderPath(path); |
-} |
- |
-class SwiftShaderComponentInstaller : public update_client::CrxInstaller { |
- public: |
- explicit SwiftShaderComponentInstaller(const base::Version& version); |
- |
- // ComponentInstaller implementation: |
- void OnUpdateError(int error) override; |
- |
- update_client::CrxInstaller::Result 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; |
- |
- private: |
- ~SwiftShaderComponentInstaller() override {} |
- |
- bool DoInstall(const base::DictionaryValue& manifest, |
- const base::FilePath& unpack_path); |
- |
- base::Version current_version_; |
-}; |
- |
-SwiftShaderComponentInstaller::SwiftShaderComponentInstaller( |
- const base::Version& version) |
- : current_version_(version) { |
- DCHECK(version.IsValid()); |
-} |
- |
-void SwiftShaderComponentInstaller::OnUpdateError(int error) { |
- NOTREACHED() << "SwiftShader update error: " << error; |
-} |
- |
-update_client::CrxInstaller::Result SwiftShaderComponentInstaller::Install( |
- const base::DictionaryValue& manifest, |
- const base::FilePath& unpack_path) { |
- return update_client::InstallFunctionWrapper(base::Bind( |
- &SwiftShaderComponentInstaller::DoInstall, base::Unretained(this), |
- base::ConstRef(manifest), base::ConstRef(unpack_path))); |
-} |
- |
-bool SwiftShaderComponentInstaller::DoInstall( |
- const base::DictionaryValue& manifest, |
- const base::FilePath& unpack_path) { |
- std::string name; |
- manifest.GetStringASCII("name", &name); |
- if (name != kSwiftShaderManifestName) |
- return false; |
- std::string proposed_version; |
- manifest.GetStringASCII("version", &proposed_version); |
- base::Version version(proposed_version.c_str()); |
- if (!version.IsValid()) |
- return false; |
- if (current_version_.CompareTo(version) >= 0) |
- return false; |
- if (!base::PathExists(unpack_path.Append(kSwiftShaderEglName)) || |
- !base::PathExists(unpack_path.Append(kSwiftShaderGlesName))) |
- return false; |
- // Passed the basic tests. Time to install it. |
- base::FilePath path = |
- GetSwiftShaderBaseDirectory().AppendASCII(version.GetString()); |
- if (base::PathExists(path)) |
- return false; |
- if (!base::Move(unpack_path, path)) |
- return false; |
- // Installation is done. Now tell the rest of chrome. |
- current_version_ = version; |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&RegisterSwiftShaderWithChrome, path)); |
- return true; |
-} |
- |
-bool SwiftShaderComponentInstaller::GetInstalledFile( |
- const std::string& file, |
- base::FilePath* installed_file) { |
- return false; |
-} |
- |
-bool SwiftShaderComponentInstaller::Uninstall() { |
- return false; |
-} |
- |
-void FinishSwiftShaderUpdateRegistration(ComponentUpdateService* cus, |
- const base::Version& version) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- |
- update_client::CrxComponent swiftshader; |
- swiftshader.name = "Swift Shader"; |
- swiftshader.installer = new SwiftShaderComponentInstaller(version); |
- swiftshader.version = version; |
- swiftshader.pk_hash.assign(kSha2Hash, &kSha2Hash[sizeof(kSha2Hash)]); |
- swiftshader.supports_group_policy_enable_component_updates = true; |
- swiftshader.requires_network_encryption = false; |
- if (!cus->RegisterComponent(swiftshader)) { |
- NOTREACHED() << "SwiftShader component registration fail"; |
- } |
-} |
- |
-class UpdateChecker : public content::GpuDataManagerObserver { |
- public: |
- explicit UpdateChecker(ComponentUpdateService* cus); |
- |
- void OnGpuInfoUpdate() override; |
- |
- private: |
- ComponentUpdateService* cus_; |
-}; |
- |
-UpdateChecker::UpdateChecker(ComponentUpdateService* cus) : cus_(cus) { |
-} |
- |
-void UpdateChecker::OnGpuInfoUpdate() { |
- GpuDataManager* gpu_data_manager = GpuDataManager::GetInstance(); |
- |
- if (!gpu_data_manager->GpuAccessAllowed(NULL) || |
- gpu_data_manager->IsFeatureBlacklisted( |
- gpu::GPU_FEATURE_TYPE_ACCELERATED_WEBGL) || |
- gpu_data_manager->ShouldUseSwiftShader()) { |
- gpu_data_manager->RemoveObserver(this); |
- DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
- base::FilePath path = GetSwiftShaderBaseDirectory(); |
- |
- base::Version version(kNullVersion); |
- GetLatestSwiftShaderDirectory(&path, &version, NULL); |
- |
- BrowserThread::PostTask( |
- BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&FinishSwiftShaderUpdateRegistration, cus_, version)); |
- } |
-} |
- |
-#if BUILDFLAG(ENABLE_SWIFTSHADER) && defined(ARCH_CPU_X86) |
- |
-// Check if there already is a version of swiftshader installed, |
-// and if so register it. |
-void RegisterSwiftShaderPath(ComponentUpdateService* cus) { |
- DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
- base::FilePath path = GetSwiftShaderBaseDirectory(); |
- if (!base::PathExists(path)) { |
- if (!base::CreateDirectory(path)) { |
- NOTREACHED() << "Could not create SwiftShader directory."; |
- return; |
- } |
- } |
- |
- base::Version version(kNullVersion); |
- std::vector<base::FilePath> older_dirs; |
- if (GetLatestSwiftShaderDirectory(&path, &version, &older_dirs)) |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&RegisterSwiftShaderWithChrome, path)); |
- |
- UpdateChecker* update_checker = new UpdateChecker(cus); |
- GpuDataManager::GetInstance()->AddObserver(update_checker); |
- update_checker->OnGpuInfoUpdate(); |
- // We leak update_checker here, because it has to stick around for the life |
- // of the GpuDataManager. |
- |
- // Remove older versions of SwiftShader. |
- for (std::vector<base::FilePath>::iterator iter = older_dirs.begin(); |
- iter != older_dirs.end(); |
- ++iter) { |
- base::DeleteFile(*iter, true); |
- } |
-} |
- |
-#endif // ENABLE_SWIFTSHADER |
- |
-} // namespace |
- |
-void RegisterSwiftShaderComponent(ComponentUpdateService* cus) { |
-#if BUILDFLAG(ENABLE_SWIFTSHADER) && defined(ARCH_CPU_X86) |
- BrowserThread::PostTask(BrowserThread::FILE, |
- FROM_HERE, |
- base::Bind(&RegisterSwiftShaderPath, cus)); |
-#endif |
-} |
- |
-} // namespace component_updater |