1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/component_updater/component_updater_paths.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/lazy_instance.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/path_service.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace component_updater { 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// This key gives the root directory of all the component installations. 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)static int g_components_root_key = -1; 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool PathProvider(int key, base::FilePath* result) { 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_GT(g_components_root_key, 0); 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Early exit here to prevent a potential infinite loop when we retrieve 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // the path for g_components_root_key. 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (key < PATH_START || key > PATH_END) 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return false; 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::FilePath cur; 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!PathService::Get(g_components_root_key, &cur)) 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return false; 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switch (key) { 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case DIR_COMPONENT_CLD2: 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cur = cur.Append(FILE_PATH_LITERAL("CLD")); 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch break; 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case DIR_RECOVERY_BASE: 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cur = cur.Append(FILE_PATH_LITERAL("recovery")); 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch break; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case DIR_SWIFT_SHADER: 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cur = cur.Append(FILE_PATH_LITERAL("SwiftShader")); 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch break; 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case DIR_SW_REPORTER: 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cur = cur.Append(FILE_PATH_LITERAL("SwReporter")); 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch break; 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case DIR_COMPONENT_EV_WHITELIST: 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cur = cur.Append(FILE_PATH_LITERAL("EVWhitelist")); 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) break; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default: 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *result = cur; 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return true; 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// This cannot be done as a static initializer sadly since Visual Studio will 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// eliminate this object file if there is no direct entry point into it. 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void RegisterPathProvider(int components_root_key) { 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_EQ(g_components_root_key, -1); 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_GT(components_root_key, 0); 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK(components_root_key < PATH_START || components_root_key > PATH_END); 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) g_components_root_key = components_root_key; 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PathService::RegisterProvider(PathProvider, PATH_START, PATH_END); 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace component_updater 67