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" |
11 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
12 #include "chrome/common/json_value_serializer.h" | 12 #include "chrome/common/json_value_serializer.h" |
| 13 #include "chrome/common/notification_service.h" |
13 | 14 |
14 // ExtensionsService | 15 // ExtensionsService |
15 | 16 |
16 const FilePath::CharType* ExtensionsService::kInstallDirectoryName = | 17 const FilePath::CharType* ExtensionsService::kInstallDirectoryName = |
17 FILE_PATH_LITERAL("Extensions"); | 18 FILE_PATH_LITERAL("Extensions"); |
18 | 19 |
19 ExtensionsService::ExtensionsService(const FilePath& profile_directory) | 20 ExtensionsService::ExtensionsService(const FilePath& profile_directory) |
20 : message_loop_(MessageLoop::current()), | 21 : message_loop_(MessageLoop::current()), |
21 backend_(new ExtensionsServiceBackend), | 22 backend_(new ExtensionsServiceBackend), |
22 install_directory_(profile_directory.Append(kInstallDirectoryName)) { | 23 install_directory_(profile_directory.Append(kInstallDirectoryName)) { |
(...skipping 21 matching lines...) Expand all Loading... |
44 } | 45 } |
45 | 46 |
46 MessageLoop* ExtensionsService::GetMessageLoop() { | 47 MessageLoop* ExtensionsService::GetMessageLoop() { |
47 return message_loop_; | 48 return message_loop_; |
48 } | 49 } |
49 | 50 |
50 void ExtensionsService::OnExtensionsLoadedFromDirectory( | 51 void ExtensionsService::OnExtensionsLoadedFromDirectory( |
51 ExtensionList* new_extensions) { | 52 ExtensionList* new_extensions) { |
52 extensions_.insert(extensions_.end(), new_extensions->begin(), | 53 extensions_.insert(extensions_.end(), new_extensions->begin(), |
53 new_extensions->end()); | 54 new_extensions->end()); |
| 55 |
| 56 NotificationService::current()->Notify(NOTIFY_EXTENSIONS_LOADED, |
| 57 NotificationService::AllSources(), |
| 58 Details<ExtensionList>(new_extensions)); |
| 59 |
54 delete new_extensions; | 60 delete new_extensions; |
55 | |
56 // TODO(aa): Notify extensions are loaded. | |
57 } | 61 } |
58 | 62 |
59 void ExtensionsService::OnExtensionLoadError(const std::string& error) { | 63 void ExtensionsService::OnExtensionLoadError(const std::string& error) { |
60 // TODO(aa): Print the error message out somewhere better. I think we are | 64 // TODO(aa): Print the error message out somewhere better. I think we are |
61 // going to need some sort of 'extension inspector'. | 65 // going to need some sort of 'extension inspector'. |
62 LOG(WARNING) << error; | 66 LOG(WARNING) << error; |
63 } | 67 } |
64 | 68 |
65 | 69 |
66 // ExtensionsServicesBackend | 70 // ExtensionsServicesBackend |
(...skipping 25 matching lines...) Expand all Loading... |
92 continue; | 96 continue; |
93 } | 97 } |
94 | 98 |
95 scoped_ptr<Value> scoped_root(root); | 99 scoped_ptr<Value> scoped_root(root); |
96 if (!root->IsType(Value::TYPE_DICTIONARY)) { | 100 if (!root->IsType(Value::TYPE_DICTIONARY)) { |
97 ReportExtensionLoadError(frontend.get(), child_path.ToWStringHack(), | 101 ReportExtensionLoadError(frontend.get(), child_path.ToWStringHack(), |
98 Extension::kInvalidManifestError); | 102 Extension::kInvalidManifestError); |
99 continue; | 103 continue; |
100 } | 104 } |
101 | 105 |
102 scoped_ptr<Extension> extension(new Extension()); | 106 scoped_ptr<Extension> extension(new Extension(child_path)); |
103 if (!extension->InitFromValue(*static_cast<DictionaryValue*>(root), | 107 if (!extension->InitFromValue(*static_cast<DictionaryValue*>(root), |
104 &error)) { | 108 &error)) { |
105 ReportExtensionLoadError(frontend.get(), child_path.ToWStringHack(), | 109 ReportExtensionLoadError(frontend.get(), child_path.ToWStringHack(), |
106 error); | 110 error); |
107 continue; | 111 continue; |
108 } | 112 } |
109 | 113 |
110 extensions->push_back(extension.release()); | 114 extensions->push_back(extension.release()); |
111 } | 115 } |
112 | 116 |
(...skipping 11 matching lines...) Expand all Loading... |
124 message)); | 128 message)); |
125 } | 129 } |
126 | 130 |
127 void ExtensionsServiceBackend::ReportExtensionsLoaded( | 131 void ExtensionsServiceBackend::ReportExtensionsLoaded( |
128 ExtensionsServiceFrontendInterface *frontend, ExtensionList* extensions) { | 132 ExtensionsServiceFrontendInterface *frontend, ExtensionList* extensions) { |
129 frontend->GetMessageLoop()->PostTask(FROM_HERE, NewRunnableMethod( | 133 frontend->GetMessageLoop()->PostTask(FROM_HERE, NewRunnableMethod( |
130 frontend, | 134 frontend, |
131 &ExtensionsServiceFrontendInterface::OnExtensionsLoadedFromDirectory, | 135 &ExtensionsServiceFrontendInterface::OnExtensionsLoadedFromDirectory, |
132 extensions)); | 136 extensions)); |
133 } | 137 } |
OLD | NEW |