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

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

Issue 2715563002: Moving SwiftShader from component to bundled library (Closed)
Patch Set: Update past extension test fixes Created 3 years, 9 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
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
« no previous file with comments | « chrome/browser/component_updater/swiftshader_component_installer.h ('k') | chrome/installer/mini_installer/chrome.release » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698