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

Side by Side Diff: chrome/install_static/install_details.cc

Issue 2491463002: Revert of Windows install_static refactor. (Closed)
Patch Set: Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/install_static/install_details.h"
6
7 #include <assert.h>
8 #include <string.h>
9
10 #include <type_traits>
11
12 #include "chrome/install_static/install_modes.h"
13 #include "chrome/install_static/install_util.h"
14 #include "chrome_elf/nt_registry/nt_registry.h"
15 #include "components/version_info/version_info_values.h"
16
17 namespace install_static {
18
19 namespace {
20
21 // The version is set at compile-time to a W.X.Y.Z value.
22 constexpr char kProductVersion[] = PRODUCT_VERSION;
23
24 // This module's instance (intentionally leaked at shutdown).
25 InstallDetails* g_module_details = nullptr;
26
27 } // namespace
28
29 std::wstring InstallDetails::GetClientStateKeyPath(bool binaries) const {
30 return binaries && multi_install()
31 ? GetBinariesClientStateKeyPath()
32 : install_static::GetClientStateKeyPath(app_guid());
33 }
34
35 std::wstring InstallDetails::GetClientStateMediumKeyPath(bool binaries) const {
36 return binaries && multi_install()
37 ? GetBinariesClientStateMediumKeyPath()
38 : install_static::GetClientStateMediumKeyPath(app_guid());
39 }
40
41 bool InstallDetails::VersionMismatch() const {
42 // Check the product version and the size of the mode structure.
43 return payload_->size != sizeof(Payload) ||
44 strcmp(payload_->product_version, &kProductVersion[0]) != 0 ||
45 payload_->mode->size != sizeof(InstallConstants);
46 }
47
48 // static
49 const InstallDetails& InstallDetails::Get() {
50 assert(g_module_details);
51 return *g_module_details;
52 }
53
54 // static
55 void InstallDetails::SetForProcess(
56 std::unique_ptr<PrimaryInstallDetails> details) {
57 assert(!details || !g_module_details);
58 // Tests may set then reset via null. In this case, delete the old instance.
59 delete g_module_details;
60 // Intentionally leaked at shutdown.
61 g_module_details = details.release();
62 }
63
64 // static
65 const InstallDetails::Payload* InstallDetails::GetPayload() {
66 assert(g_module_details);
67 static_assert(std::is_pod<Payload>::value, "Payload must be a POD-struct");
68 static_assert(std::is_pod<InstallConstants>::value,
69 "InstallConstants must be a POD-struct");
70 return g_module_details->payload_;
71 }
72
73 // static
74 void InstallDetails::InitializeFromPrimaryModule(
75 const wchar_t* primary_module_name) {
76 assert(!g_module_details);
77 using GetInstallDetailsPayloadFunction = const Payload*(__cdecl*)();
78 GetInstallDetailsPayloadFunction payload_getter =
79 reinterpret_cast<GetInstallDetailsPayloadFunction>(::GetProcAddress(
80 ::GetModuleHandle(primary_module_name), "GetInstallDetailsPayload"));
81 assert(payload_getter);
82 // Intentionally leaked at shutdown.
83 g_module_details = new InstallDetails(payload_getter());
84 }
85
86 PrimaryInstallDetails::PrimaryInstallDetails() : InstallDetails(&payload_) {
87 payload_.size = sizeof(payload_);
88 payload_.product_version = &kProductVersion[0];
89 }
90
91 } // namespace install_static
OLDNEW
« no previous file with comments | « chrome/install_static/install_details.h ('k') | chrome/install_static/install_details_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698