OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/renderer/extensions/chrome_v8_extension.h" | 5 #include "chrome/renderer/extensions/chrome_v8_extension.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 typedef std::map<int, std::string> StringMap; | 32 typedef std::map<int, std::string> StringMap; |
33 static base::LazyInstance<StringMap> g_string_map(base::LINKER_INITIALIZED); | 33 static base::LazyInstance<StringMap> g_string_map(base::LINKER_INITIALIZED); |
34 | 34 |
35 static base::LazyInstance<ChromeV8Extension::InstanceSet> g_instances( | 35 static base::LazyInstance<ChromeV8Extension::InstanceSet> g_instances( |
36 base::LINKER_INITIALIZED); | 36 base::LINKER_INITIALIZED); |
37 | 37 |
38 } // namespace | 38 } // namespace |
39 | 39 |
40 | 40 |
41 // static | 41 // static |
42 const char* ChromeV8Extension::GetStringResource(int resource_id) { | 42 base::StringPiece |
43 StringMap* strings = g_string_map.Pointer(); | 43 ChromeV8Extension::GetStringResourceAsStringPiece(int resource_id) { |
44 StringMap::iterator it = strings->find(resource_id); | 44 return ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id); |
45 if (it == strings->end()) { | 45 } |
46 it = strings->insert(std::make_pair( | 46 |
47 resource_id, | 47 int ChromeV8Extension::GetStringResourceLength(int resource_id) { |
48 ResourceBundle::GetSharedInstance().GetRawDataResource( | 48 return ChromeV8Extension::GetStringResourceAsStringPiece(resource_id).size(); |
49 resource_id).as_string())).first; | |
50 } | |
51 return it->second.c_str(); | |
52 } | 49 } |
53 | 50 |
54 // static | 51 // static |
55 content::RenderView* ChromeV8Extension::GetCurrentRenderView() { | 52 content::RenderView* ChromeV8Extension::GetCurrentRenderView() { |
56 WebFrame* webframe = WebFrame::frameForCurrentContext(); | 53 WebFrame* webframe = WebFrame::frameForCurrentContext(); |
57 DCHECK(webframe) << "RetrieveCurrentFrame called when not in a V8 context."; | 54 DCHECK(webframe) << "RetrieveCurrentFrame called when not in a V8 context."; |
58 if (!webframe) | 55 if (!webframe) |
59 return NULL; | 56 return NULL; |
60 | 57 |
61 WebView* webview = webframe->view(); | 58 WebView* webview = webframe->view(); |
62 if (!webview) | 59 if (!webview) |
63 return NULL; // can happen during closing | 60 return NULL; // can happen during closing |
64 | 61 |
65 content::RenderView* renderview = content::RenderView::FromWebView(webview); | 62 content::RenderView* renderview = content::RenderView::FromWebView(webview); |
66 DCHECK(renderview) << "Encountered a WebView without a WebViewDelegate"; | 63 DCHECK(renderview) << "Encountered a WebView without a WebViewDelegate"; |
67 return renderview; | 64 return renderview; |
68 } | 65 } |
69 | 66 |
70 ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id, | 67 ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id, |
71 ExtensionDispatcher* extension_dispatcher) | 68 ExtensionDispatcher* extension_dispatcher) |
72 : v8::Extension(name, | 69 : v8::Extension(name, |
73 GetStringResource(resource_id), | 70 GetStringResourceAsStringPiece(resource_id).data(), |
74 0, // num dependencies | 71 0, // num dependencies |
75 NULL), // dependencies array | 72 NULL, // dependencies array |
| 73 GetStringResourceLength(resource_id)), // source length |
76 extension_dispatcher_(extension_dispatcher) { | 74 extension_dispatcher_(extension_dispatcher) { |
77 g_instances.Get().insert(this); | 75 g_instances.Get().insert(this); |
78 } | 76 } |
79 | 77 |
80 ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id, | 78 ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id, |
81 int dependency_count, | 79 int dependency_count, |
82 const char** dependencies, | 80 const char** dependencies, |
83 ExtensionDispatcher* extension_dispatcher) | 81 ExtensionDispatcher* extension_dispatcher) |
84 : v8::Extension(name, | 82 : v8::Extension(name, |
85 GetStringResource(resource_id), | 83 GetStringResourceAsStringPiece(resource_id).data(), |
86 dependency_count, | 84 dependency_count, |
87 dependencies), | 85 dependencies, |
| 86 GetStringResourceLength(resource_id)), |
88 extension_dispatcher_(extension_dispatcher) { | 87 extension_dispatcher_(extension_dispatcher) { |
89 g_instances.Get().insert(this); | 88 g_instances.Get().insert(this); |
90 } | 89 } |
91 | 90 |
92 ChromeV8Extension::~ChromeV8Extension() { | 91 ChromeV8Extension::~ChromeV8Extension() { |
93 g_instances.Get().erase(this); | 92 g_instances.Get().erase(this); |
94 } | 93 } |
95 | 94 |
96 // static | 95 // static |
97 const ChromeV8Extension::InstanceSet& ChromeV8Extension::GetAll() { | 96 const ChromeV8Extension::InstanceSet& ChromeV8Extension::GetAll() { |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 if (args.Length() < 1) | 212 if (args.Length() < 1) |
214 return v8::Undefined(); | 213 return v8::Undefined(); |
215 | 214 |
216 std::vector<std::string> components; | 215 std::vector<std::string> components; |
217 for (int i = 0; i < args.Length(); ++i) | 216 for (int i = 0; i < args.Length(); ++i) |
218 components.push_back(*v8::String::Utf8Value(args[i]->ToString())); | 217 components.push_back(*v8::String::Utf8Value(args[i]->ToString())); |
219 | 218 |
220 LOG(ERROR) << JoinString(components, ','); | 219 LOG(ERROR) << JoinString(components, ','); |
221 return v8::Undefined(); | 220 return v8::Undefined(); |
222 } | 221 } |
OLD | NEW |