OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_IMPL_H_ | 5 #ifndef EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_IMPL_H_ |
6 #define EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_IMPL_H_ | 6 #define EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_IMPL_H_ |
7 | 7 |
8 #include "extensions/browser/api/execute_code_function.h" | 8 #include "extensions/browser/api/execute_code_function.h" |
9 | 9 |
10 #include "extensions/browser/api/tabs/tabs_constants.h" | 10 #include "extensions/browser/api/tabs/tabs_constants.h" |
(...skipping 15 matching lines...) Expand all Loading... | |
26 template <typename T> | 26 template <typename T> |
27 ExecuteCodeFunction<T>::ExecuteCodeFunction() { | 27 ExecuteCodeFunction<T>::ExecuteCodeFunction() { |
28 } | 28 } |
29 | 29 |
30 template <typename T> | 30 template <typename T> |
31 ExecuteCodeFunction<T>::~ExecuteCodeFunction() { | 31 ExecuteCodeFunction<T>::~ExecuteCodeFunction() { |
32 } | 32 } |
33 | 33 |
34 template <typename T> | 34 template <typename T> |
35 void ExecuteCodeFunction<T>::DidLoadFile(bool success, | 35 void ExecuteCodeFunction<T>::DidLoadFile(bool success, |
36 const std::string& data) { | 36 const std::string& data) { |
37 | |
38 if (!success || !details_->file) { | 37 if (!success || !details_->file) { |
39 DidLoadAndLocalizeFile(success, data); | 38 DidLoadAndLocalizeFile(success, data); |
40 return; | 39 return; |
41 } | 40 } |
42 | 41 |
43 ScriptExecutor::ScriptType script_type = | 42 ScriptExecutor::ScriptType script_type = |
44 ShouldInsertCSS() ? ScriptExecutor::CSS : ScriptExecutor::JAVASCRIPT; | 43 ShouldInsertCSS() ? ScriptExecutor::CSS : ScriptExecutor::JAVASCRIPT; |
45 | 44 |
46 std::string extension_id; | 45 std::string extension_id; |
47 base::FilePath extension_path; | 46 base::FilePath extension_path; |
48 std::string extension_default_locale; | 47 std::string extension_default_locale; |
49 if (T::extension()) { | 48 if (T::extension()) { |
50 extension_id = T::extension()->id(); | 49 extension_id = T::extension()->id(); |
51 extension_path = T::extension()->path(); | 50 extension_path = T::extension()->path(); |
52 T::extension()->manifest()->GetString(manifest_keys::kDefaultLocale, | 51 T::extension()->manifest()->GetString(manifest_keys::kDefaultLocale, |
53 &extension_default_locale); | 52 &extension_default_locale); |
54 } | 53 } |
55 | 54 |
56 content::BrowserThread::PostTask( | 55 content::BrowserThread::PostTask( |
57 content::BrowserThread::FILE, FROM_HERE, | 56 content::BrowserThread::FILE, |
Fady Samuel
2014/09/04 20:41:09
Can you make these changes in the ExecuteCodeFunct
| |
58 base::Bind(&ExecuteCodeFunction::GetFileURLAndLocalizeCSS, this, | 57 FROM_HERE, |
59 script_type, | 58 base::Bind(&ExecuteCodeFunction::GetFileURLAndLocalizeCSS, |
60 data, | 59 this, |
61 extension_id, | 60 script_type, |
62 extension_path, | 61 data, |
63 extension_default_locale)); | 62 extension_id, |
63 extension_path, | |
64 extension_default_locale)); | |
64 } | 65 } |
65 | 66 |
66 template <typename T> | 67 template <typename T> |
67 void ExecuteCodeFunction<T>::GetFileURLAndLocalizeCSS( | 68 void ExecuteCodeFunction<T>::GetFileURLAndLocalizeCSS( |
68 ScriptExecutor::ScriptType script_type, | 69 ScriptExecutor::ScriptType script_type, |
69 const std::string& data, | 70 const std::string& data, |
70 const std::string& extension_id, | 71 const std::string& extension_id, |
71 const base::FilePath& extension_path, | 72 const base::FilePath& extension_path, |
72 const std::string& extension_default_locale) { | 73 const std::string& extension_default_locale) { |
73 | |
74 std::string localized_data = data; | 74 std::string localized_data = data; |
75 // Check if the file is CSS and needs localization. | 75 // Check if the file is CSS and needs localization. |
76 if ((script_type == ScriptExecutor::CSS) && | 76 if ((script_type == ScriptExecutor::CSS) && !extension_id.empty() && |
77 !extension_id.empty() && | |
78 (data.find(MessageBundle::kMessageBegin) != std::string::npos)) { | 77 (data.find(MessageBundle::kMessageBegin) != std::string::npos)) { |
79 scoped_ptr<SubstitutionMap> localization_messages( | 78 scoped_ptr<SubstitutionMap> localization_messages( |
80 file_util::LoadMessageBundleSubstitutionMap( | 79 file_util::LoadMessageBundleSubstitutionMap( |
81 extension_path, extension_id, extension_default_locale)); | 80 extension_path, extension_id, extension_default_locale)); |
82 | 81 |
83 // We need to do message replacement on the data, so it has to be mutable. | 82 // We need to do message replacement on the data, so it has to be mutable. |
84 std::string error; | 83 std::string error; |
85 MessageBundle::ReplaceMessagesWithExternalDictionary(*localization_messages, | 84 MessageBundle::ReplaceMessagesWithExternalDictionary( |
86 &localized_data, | 85 *localization_messages, &localized_data, &error); |
87 &error); | |
88 } | 86 } |
89 | 87 |
90 file_url_ = net::FilePathToFileURL(resource_.GetFilePath()); | 88 file_url_ = net::FilePathToFileURL(resource_.GetFilePath()); |
91 | 89 |
92 // Call back DidLoadAndLocalizeFile on the UI thread. The success parameter | 90 // Call back DidLoadAndLocalizeFile on the UI thread. The success parameter |
93 // is always true, because if loading had failed, we wouldn't have had | 91 // is always true, because if loading had failed, we wouldn't have had |
94 // anything to localize. | 92 // anything to localize. |
95 content::BrowserThread::PostTask( | 93 content::BrowserThread::PostTask( |
96 content::BrowserThread::UI, FROM_HERE, | 94 content::BrowserThread::UI, |
97 base::Bind(&ExecuteCodeFunction::DidLoadAndLocalizeFile, this, | 95 FROM_HERE, |
98 true, localized_data)); | 96 base::Bind(&ExecuteCodeFunction::DidLoadAndLocalizeFile, |
97 this, | |
98 true, | |
99 localized_data)); | |
99 } | 100 } |
100 | 101 |
101 template <typename T> | 102 template <typename T> |
102 void ExecuteCodeFunction<T>::DidLoadAndLocalizeFile(bool success, | 103 void ExecuteCodeFunction<T>::DidLoadAndLocalizeFile(bool success, |
103 const std::string& data) { | 104 const std::string& data) { |
104 if (success) { | 105 if (success) { |
105 if (!Execute(data)) | 106 if (!Execute(data)) |
106 T::SendResponse(false); | 107 T::SendResponse(false); |
107 } else { | 108 } else { |
108 // TODO(viettrungluu): bug: there's no particular reason the path should be | 109 // TODO(viettrungluu): bug: there's no particular reason the path should be |
109 // UTF-8, in which case this may fail. | 110 // UTF-8, in which case this may fail. |
110 T::error_ = ErrorUtils::FormatErrorMessage(tabs_constants::kLoadFileError, | 111 T::error_ = ErrorUtils::FormatErrorMessage( |
112 tabs_constants::kLoadFileError, | |
111 resource_.relative_path().AsUTF8Unsafe()); | 113 resource_.relative_path().AsUTF8Unsafe()); |
112 T::SendResponse(false); | 114 T::SendResponse(false); |
113 } | 115 } |
114 } | 116 } |
115 | 117 |
116 template <typename T> | 118 template <typename T> |
117 bool ExecuteCodeFunction<T>::Execute(const std::string& code_string) { | 119 bool ExecuteCodeFunction<T>::Execute(const std::string& code_string) { |
118 ScriptExecutor* executor = GetScriptExecutor(); | 120 ScriptExecutor* executor = GetScriptExecutor(); |
119 if (!executor) | 121 if (!executor) |
120 return false; | 122 return false; |
121 | 123 |
122 if (!T::extension()) | 124 if (!T::extension()) |
123 return false; | 125 return false; |
124 | 126 |
125 ScriptExecutor::ScriptType script_type = ScriptExecutor::JAVASCRIPT; | 127 ScriptExecutor::ScriptType script_type = ScriptExecutor::JAVASCRIPT; |
126 if (ShouldInsertCSS()) | 128 if (ShouldInsertCSS()) |
127 script_type = ScriptExecutor::CSS; | 129 script_type = ScriptExecutor::CSS; |
128 | 130 |
129 ScriptExecutor::FrameScope frame_scope = | 131 ScriptExecutor::FrameScope frame_scope = |
130 details_->all_frames.get() && *details_->all_frames ? | 132 details_->all_frames.get() && *details_->all_frames |
131 ScriptExecutor::ALL_FRAMES : | 133 ? ScriptExecutor::ALL_FRAMES |
132 ScriptExecutor::TOP_FRAME; | 134 : ScriptExecutor::TOP_FRAME; |
133 | 135 |
134 ScriptExecutor::MatchAboutBlank match_about_blank = | 136 ScriptExecutor::MatchAboutBlank match_about_blank = |
135 details_->match_about_blank.get() && *details_->match_about_blank ? | 137 details_->match_about_blank.get() && *details_->match_about_blank |
136 ScriptExecutor::MATCH_ABOUT_BLANK : | 138 ? ScriptExecutor::MATCH_ABOUT_BLANK |
137 ScriptExecutor::DONT_MATCH_ABOUT_BLANK; | 139 : ScriptExecutor::DONT_MATCH_ABOUT_BLANK; |
138 | 140 |
139 UserScript::RunLocation run_at = | 141 UserScript::RunLocation run_at = UserScript::UNDEFINED; |
140 UserScript::UNDEFINED; | |
141 switch (details_->run_at) { | 142 switch (details_->run_at) { |
142 case InjectDetails::RUN_AT_NONE: | 143 case InjectDetails::RUN_AT_NONE: |
143 case InjectDetails::RUN_AT_DOCUMENT_IDLE: | 144 case InjectDetails::RUN_AT_DOCUMENT_IDLE: |
144 run_at = UserScript::DOCUMENT_IDLE; | 145 run_at = UserScript::DOCUMENT_IDLE; |
145 break; | 146 break; |
146 case InjectDetails::RUN_AT_DOCUMENT_START: | 147 case InjectDetails::RUN_AT_DOCUMENT_START: |
147 run_at = UserScript::DOCUMENT_START; | 148 run_at = UserScript::DOCUMENT_START; |
148 break; | 149 break; |
149 case InjectDetails::RUN_AT_DOCUMENT_END: | 150 case InjectDetails::RUN_AT_DOCUMENT_END: |
150 run_at = UserScript::DOCUMENT_END; | 151 run_at = UserScript::DOCUMENT_END; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
198 if (!details_->file.get()) | 199 if (!details_->file.get()) |
199 return false; | 200 return false; |
200 resource_ = T::extension()->GetResource(*details_->file); | 201 resource_ = T::extension()->GetResource(*details_->file); |
201 | 202 |
202 if (resource_.extension_root().empty() || resource_.relative_path().empty()) { | 203 if (resource_.extension_root().empty() || resource_.relative_path().empty()) { |
203 T::error_ = tabs_constants::kNoCodeOrFileToExecuteError; | 204 T::error_ = tabs_constants::kNoCodeOrFileToExecuteError; |
204 return false; | 205 return false; |
205 } | 206 } |
206 | 207 |
207 int resource_id; | 208 int resource_id; |
208 if (ExtensionsBrowserClient::Get()->GetComponentExtensionResourceManager()-> | 209 if (ExtensionsBrowserClient::Get() |
209 IsComponentExtensionResource( | 210 ->GetComponentExtensionResourceManager() |
210 resource_.extension_root(), resource_.relative_path(), | 211 ->IsComponentExtensionResource(resource_.extension_root(), |
211 &resource_id)) { | 212 resource_.relative_path(), |
213 &resource_id)) { | |
212 const ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 214 const ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
213 DidLoadFile(true, rb.GetRawDataResource(resource_id).as_string()); | 215 DidLoadFile(true, rb.GetRawDataResource(resource_id).as_string()); |
214 } else { | 216 } else { |
215 scoped_refptr<FileReader> file_reader(new FileReader( | 217 scoped_refptr<FileReader> file_reader(new FileReader( |
216 resource_, base::Bind(&ExecuteCodeFunction::DidLoadFile, this))); | 218 resource_, base::Bind(&ExecuteCodeFunction::DidLoadFile, this))); |
217 file_reader->Start(); | 219 file_reader->Start(); |
218 } | 220 } |
219 | 221 |
220 return true; | 222 return true; |
221 } | 223 } |
(...skipping 10 matching lines...) Expand all Loading... | |
232 } | 234 } |
233 | 235 |
234 template <typename T> | 236 template <typename T> |
235 bool ExecuteCodeFunction<T>::ValidationFailure(T* function) { | 237 bool ExecuteCodeFunction<T>::ValidationFailure(T* function) { |
236 return T::ValidationFailure(function); | 238 return T::ValidationFailure(function); |
237 } | 239 } |
238 | 240 |
239 } // namespace extensions | 241 } // namespace extensions |
240 | 242 |
241 #endif // EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_IMPL_H_ | 243 #endif // EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_IMPL_H_ |
242 | |
OLD | NEW |