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

Unified Diff: chrome/install_static/install_details.cc

Issue 2422643002: Windows install_static refactor. (Closed)
Patch Set: fix static build Created 4 years, 2 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/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

Powered by Google App Engine
This is Rietveld 408576698