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

Side by Side Diff: chrome/common/chrome_paths.cc

Issue 174253002: Initialize chrome::DIR_USER_DATA early on for service processes, etc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move helper functions around to avoid dependency issues. Created 6 years, 10 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/common/chrome_paths.h ('k') | no next file » | 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/common/chrome_paths.h" 5 #include "chrome/common/chrome_paths.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/lazy_instance.h"
8 #include "base/logging.h" 9 #include "base/logging.h"
9 #include "base/mac/bundle_locations.h" 10 #include "base/mac/bundle_locations.h"
10 #include "base/path_service.h" 11 #include "base/path_service.h"
11 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
12 #include "base/sys_info.h" 13 #include "base/sys_info.h"
13 #include "base/threading/thread_restrictions.h" 14 #include "base/threading/thread_restrictions.h"
14 #include "base/version.h" 15 #include "base/version.h"
15 #include "chrome/common/chrome_constants.h" 16 #include "chrome/common/chrome_constants.h"
16 #include "chrome/common/chrome_paths_internal.h" 17 #include "chrome/common/chrome_paths_internal.h"
17 #include "chrome/common/widevine_cdm_constants.h" 18 #include "chrome/common/widevine_cdm_constants.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 // The path to the external extension <id>.json files. 88 // The path to the external extension <id>.json files.
88 // /usr/share seems like a good choice, see: http://www.pathname.com/fhs/ 89 // /usr/share seems like a good choice, see: http://www.pathname.com/fhs/
89 const base::FilePath::CharType kFilepathSinglePrefExtensions[] = 90 const base::FilePath::CharType kFilepathSinglePrefExtensions[] =
90 #if defined(GOOGLE_CHROME_BUILD) 91 #if defined(GOOGLE_CHROME_BUILD)
91 FILE_PATH_LITERAL("/usr/share/google-chrome/extensions"); 92 FILE_PATH_LITERAL("/usr/share/google-chrome/extensions");
92 #else 93 #else
93 FILE_PATH_LITERAL("/usr/share/chromium/extensions"); 94 FILE_PATH_LITERAL("/usr/share/chromium/extensions");
94 #endif // defined(GOOGLE_CHROME_BUILD) 95 #endif // defined(GOOGLE_CHROME_BUILD)
95 #endif // defined(OS_LINUX) 96 #endif // defined(OS_LINUX)
96 97
97 } // namespace 98 static bool g_user_data_dir_initialized = false;
98 99
99 namespace chrome { 100 static base::LazyInstance<base::FilePath>
101 g_invalid_specified_user_data_dir = LAZY_INSTANCE_INITIALIZER;
100 102
101 // Gets the path for internal plugins. 103 // Gets the path for internal plugins.
102 bool GetInternalPluginsDirectory(base::FilePath* result) { 104 bool GetInternalPluginsDirectory(base::FilePath* result) {
103 #if defined(OS_MACOSX) && !defined(OS_IOS) 105 #if defined(OS_MACOSX) && !defined(OS_IOS)
104 // If called from Chrome, get internal plugins from a subdirectory of the 106 // If called from Chrome, get internal plugins from a subdirectory of the
105 // framework. 107 // framework.
106 if (base::mac::AmIBundled()) { 108 if (base::mac::AmIBundled()) {
107 *result = chrome::GetFrameworkBundlePath(); 109 *result = chrome::GetFrameworkBundlePath();
108 DCHECK(!result->empty()); 110 DCHECK(!result->empty());
109 *result = result->Append("Internet Plug-Ins"); 111 *result = result->Append("Internet Plug-Ins");
110 return true; 112 return true;
111 } 113 }
112 // In tests, just look in the module directory (below). 114 // In tests, just look in the module directory (below).
113 #endif 115 #endif
114 116
115 // The rest of the world expects plugins in the module directory. 117 // The rest of the world expects plugins in the module directory.
116 return PathService::Get(base::DIR_MODULE, result); 118 return PathService::Get(base::DIR_MODULE, result);
117 } 119 }
118 120
121 } // namespace
122
123 namespace chrome {
124
119 bool PathProvider(int key, base::FilePath* result) { 125 bool PathProvider(int key, base::FilePath* result) {
120 // Some keys are just aliases... 126 // Some keys are just aliases...
121 switch (key) { 127 switch (key) {
122 case chrome::DIR_APP: 128 case chrome::DIR_APP:
123 return PathService::Get(base::DIR_MODULE, result); 129 return PathService::Get(base::DIR_MODULE, result);
124 case chrome::DIR_LOGS: 130 case chrome::DIR_LOGS:
125 #ifdef NDEBUG 131 #ifdef NDEBUG
126 // Release builds write to the data dir 132 // Release builds write to the data dir
127 return PathService::Get(chrome::DIR_USER_DATA, result); 133 return PathService::Get(chrome::DIR_USER_DATA, result);
128 #else 134 #else
(...skipping 19 matching lines...) Expand all
148 return PathService::Get(base::FILE_MODULE, result); 154 return PathService::Get(base::FILE_MODULE, result);
149 } 155 }
150 156
151 // Assume that we will not need to create the directory if it does not exist. 157 // Assume that we will not need to create the directory if it does not exist.
152 // This flag can be set to true for the cases where we want to create it. 158 // This flag can be set to true for the cases where we want to create it.
153 bool create_dir = false; 159 bool create_dir = false;
154 160
155 base::FilePath cur; 161 base::FilePath cur;
156 switch (key) { 162 switch (key) {
157 case chrome::DIR_USER_DATA: 163 case chrome::DIR_USER_DATA:
164 CHECK(g_user_data_dir_initialized);
Vitaly Buka (NO REVIEWS) 2014/02/22 00:27:09 DCHECK is safer here. We need to merge this patch
msw 2014/02/22 00:42:07 Done.
158 if (!GetDefaultUserDataDirectory(&cur)) { 165 if (!GetDefaultUserDataDirectory(&cur)) {
159 NOTREACHED(); 166 NOTREACHED();
160 return false; 167 return false;
161 } 168 }
162 create_dir = true; 169 create_dir = true;
163 break; 170 break;
164 case chrome::DIR_USER_DOCUMENTS: 171 case chrome::DIR_USER_DOCUMENTS:
165 if (!GetUserDocumentsDirectory(&cur)) 172 if (!GetUserDocumentsDirectory(&cur))
166 return false; 173 return false;
167 create_dir = true; 174 create_dir = true;
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 *result = cur; 551 *result = cur;
545 return true; 552 return true;
546 } 553 }
547 554
548 // This cannot be done as a static initializer sadly since Visual Studio will 555 // This cannot be done as a static initializer sadly since Visual Studio will
549 // eliminate this object file if there is no direct entry point into it. 556 // eliminate this object file if there is no direct entry point into it.
550 void RegisterPathProvider() { 557 void RegisterPathProvider() {
551 PathService::RegisterProvider(PathProvider, PATH_START, PATH_END); 558 PathService::RegisterProvider(PathProvider, PATH_START, PATH_END);
552 } 559 }
553 560
561 void SetUserDataDirInitialized() {
562 g_user_data_dir_initialized = true;
563 }
564
565 void SetInvalidSpecifiedUserDataDir(const base::FilePath& user_data_dir) {
566 g_invalid_specified_user_data_dir.Get() = user_data_dir;
567 }
568
569 const base::FilePath& GetInvalidSpecifiedUserDataDir() {
570 return g_invalid_specified_user_data_dir.Get();
571 }
572
554 } // namespace chrome 573 } // namespace chrome
OLDNEW
« no previous file with comments | « chrome/common/chrome_paths.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698