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

Side by Side Diff: chrome/browser/chromeos/cros/cros_library.cc

Issue 10574040: Remove chromeos::LibraryLoader (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fix Created 8 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/chromeos/cros/cros_library.h ('k') | chrome/browser/chromeos/cros/cros_mock.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/cros/cros_library.h" 5 #include "chrome/browser/chromeos/cros/cros_library.h"
6 6
7 #include "chrome/browser/chromeos/cros/burn_library.h" 7 #include "chrome/browser/chromeos/cros/burn_library.h"
8 #include "chrome/browser/chromeos/cros/cert_library.h" 8 #include "chrome/browser/chromeos/cros/cert_library.h"
9 #include "chrome/browser/chromeos/cros/cryptohome_library.h" 9 #include "chrome/browser/chromeos/cros/cryptohome_library.h"
10 #include "chrome/browser/chromeos/cros/library_loader.h"
11 #include "chrome/browser/chromeos/cros/network_library.h" 10 #include "chrome/browser/chromeos/cros/network_library.h"
12 #include "third_party/cros/chromeos_cros_api.h"
13 11
14 // Pass !libcros_loaded_ to GetDefaultImpl instead of use_stub_impl_ so that
15 // we load the stub impl regardless of whether use_stub was specified or the
16 // library failed to load.
17 #define DEFINE_GET_LIBRARY_METHOD(class_prefix, var_prefix) \ 12 #define DEFINE_GET_LIBRARY_METHOD(class_prefix, var_prefix) \
18 class_prefix##Library* CrosLibrary::Get##class_prefix##Library() { \ 13 class_prefix##Library* CrosLibrary::Get##class_prefix##Library() { \
19 return var_prefix##_lib_.GetDefaultImpl(!libcros_loaded_); \ 14 return var_prefix##_lib_.GetDefaultImpl(use_stub_impl_); \
20 } 15 }
21 16
22 #define DEFINE_SET_LIBRARY_METHOD(class_prefix, var_prefix) \ 17 #define DEFINE_SET_LIBRARY_METHOD(class_prefix, var_prefix) \
23 void CrosLibrary::TestApi::Set##class_prefix##Library( \ 18 void CrosLibrary::TestApi::Set##class_prefix##Library( \
24 class_prefix##Library* library, bool own) { \ 19 class_prefix##Library* library, bool own) { \
25 library_->var_prefix##_lib_.SetImpl(library, own); \ 20 library_->var_prefix##_lib_.SetImpl(library, own); \
26 } 21 }
27 22
28 namespace chromeos { 23 namespace chromeos {
29 24
30 static CrosLibrary* g_cros_library = NULL; 25 static CrosLibrary* g_cros_library = NULL;
31 26
32 CrosLibrary::CrosLibrary(bool use_stub) 27 CrosLibrary::CrosLibrary(bool use_stub)
33 : library_loader_(NULL), 28 : use_stub_impl_(use_stub),
34 own_library_loader_(false),
35 use_stub_impl_(use_stub),
36 libcros_loaded_(false),
37 load_error_(false),
38 test_api_(NULL) { 29 test_api_(NULL) {
39 } 30 }
40 31
41 CrosLibrary::~CrosLibrary() { 32 CrosLibrary::~CrosLibrary() {
42 if (own_library_loader_)
43 delete library_loader_;
44 } 33 }
45 34
46 // static 35 // static
47 void CrosLibrary::Initialize(bool use_stub) { 36 void CrosLibrary::Initialize(bool use_stub) {
48 CHECK(!g_cros_library) << "CrosLibrary: Multiple calls to Initialize()."; 37 CHECK(!g_cros_library) << "CrosLibrary: Multiple calls to Initialize().";
49 g_cros_library = new CrosLibrary(use_stub); 38 g_cros_library = new CrosLibrary(use_stub);
50 if (use_stub) { 39 VLOG_IF(1, use_stub) << "CrosLibrary Initialized with Stub Impl.";
51 VLOG(1) << "CrosLibrary Initialized with Stub Impl.";
52 return;
53 }
54 // Attempt to load libcros here, so that we can log, show warnings, and
55 // set load_error_string_ immediately.
56 if (g_cros_library->LoadLibcros()) {
57 VLOG(1) << "CrosLibrary Initialized, version = " << kCrosAPIVersion;
58 } else {
59 LOG(WARNING) << "CrosLibrary failed to Initialize."
60 << " Will use stub implementations.";
61 }
62 } 40 }
63 41
64 // static 42 // static
65 void CrosLibrary::Shutdown() { 43 void CrosLibrary::Shutdown() {
66 CHECK(g_cros_library) << "CrosLibrary::Shutdown() called with NULL library"; 44 CHECK(g_cros_library) << "CrosLibrary::Shutdown() called with NULL library";
67 VLOG(1) << "CrosLibrary Shutting down..."; 45 VLOG(1) << "CrosLibrary Shutting down...";
68 delete g_cros_library; 46 delete g_cros_library;
69 g_cros_library = NULL; 47 g_cros_library = NULL;
70 VLOG(1) << " CrosLibrary Shutdown completed."; 48 VLOG(1) << " CrosLibrary Shutdown completed.";
71 } 49 }
72 50
73 // static 51 // static
74 CrosLibrary* CrosLibrary::Get() { 52 CrosLibrary* CrosLibrary::Get() {
75 return g_cros_library; 53 return g_cros_library;
76 } 54 }
77 55
78 DEFINE_GET_LIBRARY_METHOD(Burn, burn); 56 DEFINE_GET_LIBRARY_METHOD(Burn, burn);
79 DEFINE_GET_LIBRARY_METHOD(Cert, cert); 57 DEFINE_GET_LIBRARY_METHOD(Cert, cert);
80 DEFINE_GET_LIBRARY_METHOD(Cryptohome, crypto); 58 DEFINE_GET_LIBRARY_METHOD(Cryptohome, crypto);
81 DEFINE_GET_LIBRARY_METHOD(Network, network); 59 DEFINE_GET_LIBRARY_METHOD(Network, network);
82 60
83 bool CrosLibrary::LoadLibcros() {
84 if (!libcros_loaded_ && !load_error_) {
85 if (!library_loader_) {
86 library_loader_ = LibraryLoader::GetImpl();
87 own_library_loader_ = true;
88 }
89 libcros_loaded_ = library_loader_->Load(&load_error_string_);
90 load_error_ = !libcros_loaded_;
91 }
92 return libcros_loaded_;
93 }
94
95 CrosLibrary::TestApi* CrosLibrary::GetTestApi() { 61 CrosLibrary::TestApi* CrosLibrary::GetTestApi() {
96 if (!test_api_.get()) 62 if (!test_api_.get())
97 test_api_.reset(new TestApi(this)); 63 test_api_.reset(new TestApi(this));
98 return test_api_.get(); 64 return test_api_.get();
99 } 65 }
100 66
101 void CrosLibrary::TestApi::ResetUseStubImpl() {
102 library_->use_stub_impl_ = false;
103 if (!library_->LoadLibcros())
104 LOG(WARNING) << "ResetUseStubImpl: Unable to load libcros.";
105 }
106
107 void CrosLibrary::TestApi::SetLibraryLoader(LibraryLoader* loader, bool own) {
108 if (library_->library_loader_ == loader)
109 return;
110 if (library_->own_library_loader_)
111 delete library_->library_loader_;
112 library_->own_library_loader_ = own;
113 library_->library_loader_ = loader;
114 // Reset load flags when loader changes. Otherwise some tests are really not
115 // going to be happy.
116 library_->libcros_loaded_ = false;
117 library_->load_error_ = false;
118 }
119
120 DEFINE_SET_LIBRARY_METHOD(Cert, cert); 67 DEFINE_SET_LIBRARY_METHOD(Cert, cert);
121 DEFINE_SET_LIBRARY_METHOD(Burn, burn); 68 DEFINE_SET_LIBRARY_METHOD(Burn, burn);
122 DEFINE_SET_LIBRARY_METHOD(Cryptohome, crypto); 69 DEFINE_SET_LIBRARY_METHOD(Cryptohome, crypto);
123 DEFINE_SET_LIBRARY_METHOD(Network, network); 70 DEFINE_SET_LIBRARY_METHOD(Network, network);
124 71
125 } // namespace chromeos 72 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/cros/cros_library.h ('k') | chrome/browser/chromeos/cros/cros_mock.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698