| Index: chrome/install_static/install_details.cc
|
| diff --git a/chrome/install_static/install_details.cc b/chrome/install_static/install_details.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1bed90b162b6d725691bf4f1a94410254950e75b
|
| --- /dev/null
|
| +++ b/chrome/install_static/install_details.cc
|
| @@ -0,0 +1,68 @@
|
| +// Copyright 2016 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/install_static/install_details.h"
|
| +
|
| +#include <assert.h>
|
| +
|
| +#include "chrome/install_static/install_modes.h"
|
| +#include "chrome/install_static/install_util.h"
|
| +#include "chrome_elf/nt_registry/nt_registry.h"
|
| +
|
| +namespace install_static {
|
| +
|
| +namespace {
|
| +
|
| +// This module's instance.
|
| +InstallDetails* g_module_details = nullptr;
|
| +
|
| +} // namespace
|
| +
|
| +std::wstring InstallDetails::GetClientStateKeyPath(bool binaries) const {
|
| + return binaries && multi_install()
|
| + ? GetBinariesClientStateKeyPath()
|
| + : install_static::GetClientStateKeyPath(app_guid());
|
| +}
|
| +
|
| +std::wstring InstallDetails::GetClientStateMediumKeyPath(bool binaries) const {
|
| + return binaries && multi_install()
|
| + ? GetBinariesClientStateMediumKeyPath()
|
| + : install_static::GetClientStateMediumKeyPath(app_guid());
|
| +}
|
| +
|
| +// static
|
| +const InstallDetails& InstallDetails::Get() {
|
| + assert(g_module_details);
|
| + return *g_module_details;
|
| +}
|
| +
|
| +// static
|
| +void InstallDetails::SetForProcess(
|
| + std::unique_ptr<PrimaryInstallDetails> details) {
|
| + assert(!details || !g_module_details);
|
| + // Intentionally leaked at shutdown.
|
| + g_module_details = details.release();
|
| +}
|
| +
|
| +// static
|
| +intptr_t InstallDetails::GetPayload() {
|
| + assert(g_module_details);
|
| + return reinterpret_cast<intptr_t>(g_module_details->payload_);
|
| +}
|
| +
|
| +// static
|
| +void InstallDetails::ImportFromModule(const wchar_t* module_name,
|
| + const char* export_name) {
|
| + assert(!g_module_details);
|
| + using GetInstallDetailsPayloadFunction = intptr_t(__cdecl*)();
|
| + GetInstallDetailsPayloadFunction payload_getter =
|
| + reinterpret_cast<GetInstallDetailsPayloadFunction>(
|
| + ::GetProcAddress(::GetModuleHandle(module_name), export_name));
|
| + assert(payload_getter);
|
| + // Intentionally leaked at shutdown.
|
| + g_module_details =
|
| + new InstallDetails(reinterpret_cast<Payload*>(payload_getter()));
|
| +}
|
| +
|
| +} // namespace install_static
|
|
|