OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/extensions/extensions_service.h" | 5 #include "chrome/browser/extensions/extensions_service.h" |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/thread.h" | 10 #include "base/thread.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 | 64 |
65 | 65 |
66 // ExtensionsServicesBackend | 66 // ExtensionsServicesBackend |
67 | 67 |
68 bool ExtensionsServiceBackend::LoadExtensionsFromDirectory( | 68 bool ExtensionsServiceBackend::LoadExtensionsFromDirectory( |
69 const FilePath& path, | 69 const FilePath& path, |
70 scoped_refptr<ExtensionsServiceFrontendInterface> frontend) { | 70 scoped_refptr<ExtensionsServiceFrontendInterface> frontend) { |
71 // Find all child directories in the install directory and load their | 71 // Find all child directories in the install directory and load their |
72 // manifests. Post errors and results to the frontend. | 72 // manifests. Post errors and results to the frontend. |
73 scoped_ptr<ExtensionList> extensions(new ExtensionList); | 73 scoped_ptr<ExtensionList> extensions(new ExtensionList); |
74 file_util::FileEnumerator enumerator(path.ToWStringHack(), | 74 file_util::FileEnumerator enumerator(path, |
75 false, // not recursive | 75 false, // not recursive |
76 file_util::FileEnumerator::DIRECTORIES); | 76 file_util::FileEnumerator::DIRECTORIES); |
77 for (std::wstring child_path = enumerator.Next(); !child_path.empty(); | 77 for (FilePath child_path = enumerator.Next(); !child_path.value().empty(); |
78 child_path = enumerator.Next()) { | 78 child_path = enumerator.Next()) { |
79 FilePath manifest_path = FilePath::FromWStringHack(child_path).Append( | 79 FilePath manifest_path = child_path.Append(Extension::kManifestFilename); |
80 Extension::kManifestFilename); | |
81 if (!file_util::PathExists(manifest_path)) { | 80 if (!file_util::PathExists(manifest_path)) { |
82 ReportExtensionLoadError(frontend.get(), child_path, | 81 ReportExtensionLoadError(frontend.get(), child_path.ToWStringHack(), |
83 Extension::kInvalidManifestError); | 82 Extension::kInvalidManifestError); |
84 continue; | 83 continue; |
85 } | 84 } |
86 | 85 |
87 JSONFileValueSerializer serializer(manifest_path.ToWStringHack()); | 86 JSONFileValueSerializer serializer(manifest_path.ToWStringHack()); |
88 Value* root = NULL; | 87 Value* root = NULL; |
89 std::string error; | 88 std::string error; |
90 if (!serializer.Deserialize(&root, &error)) { | 89 if (!serializer.Deserialize(&root, &error)) { |
91 ReportExtensionLoadError(frontend.get(), child_path, error); | 90 ReportExtensionLoadError(frontend.get(), child_path.ToWStringHack(), |
| 91 error); |
92 continue; | 92 continue; |
93 } | 93 } |
94 | 94 |
95 scoped_ptr<Value> scoped_root(root); | 95 scoped_ptr<Value> scoped_root(root); |
96 if (!root->IsType(Value::TYPE_DICTIONARY)) { | 96 if (!root->IsType(Value::TYPE_DICTIONARY)) { |
97 ReportExtensionLoadError(frontend.get(), child_path, | 97 ReportExtensionLoadError(frontend.get(), child_path.ToWStringHack(), |
98 Extension::kInvalidManifestError); | 98 Extension::kInvalidManifestError); |
99 continue; | 99 continue; |
100 } | 100 } |
101 | 101 |
102 scoped_ptr<Extension> extension(new Extension()); | 102 scoped_ptr<Extension> extension(new Extension()); |
103 if (!extension->InitFromValue(*static_cast<DictionaryValue*>(root), | 103 if (!extension->InitFromValue(*static_cast<DictionaryValue*>(root), |
104 &error)) { | 104 &error)) { |
105 ReportExtensionLoadError(frontend.get(), child_path, error); | 105 ReportExtensionLoadError(frontend.get(), child_path.ToWStringHack(), |
| 106 error); |
106 continue; | 107 continue; |
107 } | 108 } |
108 | 109 |
109 extensions->push_back(extension.release()); | 110 extensions->push_back(extension.release()); |
110 } | 111 } |
111 | 112 |
112 ReportExtensionsLoaded(frontend.get(), extensions.release()); | 113 ReportExtensionsLoaded(frontend.get(), extensions.release()); |
113 return true; | 114 return true; |
114 } | 115 } |
115 | 116 |
116 void ExtensionsServiceBackend::ReportExtensionLoadError( | 117 void ExtensionsServiceBackend::ReportExtensionLoadError( |
117 ExtensionsServiceFrontendInterface *frontend, const std::wstring& path, | 118 ExtensionsServiceFrontendInterface *frontend, const std::wstring& path, |
118 const std::string &error) { | 119 const std::string &error) { |
119 std::string message = StringPrintf("Could not load extension from '%s'. %s", | 120 std::string message = StringPrintf("Could not load extension from '%s'. %s", |
120 WideToASCII(path).c_str(), error.c_str()); | 121 WideToASCII(path).c_str(), error.c_str()); |
121 frontend->GetMessageLoop()->PostTask(FROM_HERE, NewRunnableMethod( | 122 frontend->GetMessageLoop()->PostTask(FROM_HERE, NewRunnableMethod( |
122 frontend, &ExtensionsServiceFrontendInterface::OnExtensionLoadError, | 123 frontend, &ExtensionsServiceFrontendInterface::OnExtensionLoadError, |
123 message)); | 124 message)); |
124 } | 125 } |
125 | 126 |
126 void ExtensionsServiceBackend::ReportExtensionsLoaded( | 127 void ExtensionsServiceBackend::ReportExtensionsLoaded( |
127 ExtensionsServiceFrontendInterface *frontend, ExtensionList* extensions) { | 128 ExtensionsServiceFrontendInterface *frontend, ExtensionList* extensions) { |
128 frontend->GetMessageLoop()->PostTask(FROM_HERE, NewRunnableMethod( | 129 frontend->GetMessageLoop()->PostTask(FROM_HERE, NewRunnableMethod( |
129 frontend, | 130 frontend, |
130 &ExtensionsServiceFrontendInterface::OnExtensionsLoadedFromDirectory, | 131 &ExtensionsServiceFrontendInterface::OnExtensionsLoadedFromDirectory, |
131 extensions)); | 132 extensions)); |
132 } | 133 } |
OLD | NEW |