Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: content/browser/webui/web_ui_data_source_impl.cc

Issue 12093012: Clean up of url data manager classes in content: move URLDataSourceImpl to its own file, move all t… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/webui/web_ui_data_source.h" 5 #include "content/browser/webui/web_ui_data_source_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/ref_counted_memory.h" 10 #include "base/memory/ref_counted_memory.h"
11 #include "base/string_util.h" 11 #include "base/string_util.h"
12 #include "content/public/common/content_client.h" 12 #include "content/public/common/content_client.h"
13 #include "ui/webui/jstemplate_builder.h" 13 #include "ui/webui/jstemplate_builder.h"
14 #include "ui/webui/web_ui_util.h" 14 #include "ui/webui/web_ui_util.h"
15 15
16 namespace content { 16 namespace content {
17 17
18 WebUIDataSource* WebUIDataSource::Create(const std::string& source_name) { 18 WebUIDataSource* WebUIDataSource::Create(const std::string& source_name) {
19 return new ChromeWebUIDataSource(source_name); 19 return new WebUIDataSourceImpl(source_name);
20 } 20 }
21 21
22 void WebUIDataSource::Add(BrowserContext* browser_context, 22 void WebUIDataSource::Add(BrowserContext* browser_context,
23 WebUIDataSource* source) { 23 WebUIDataSource* source) {
24 ChromeURLDataManager::AddWebUIDataSource(browser_context, source); 24 URLDataManager::AddWebUIDataSource(browser_context, source);
25 } 25 }
26 26
27 } // namespace content 27 // Internal class to hide the fact that WebUIDataSourceImpl implements
28 28 // URLDataSource.
29 // Internal class to hide the fact that ChromeWebUIDataSource implements 29 class WebUIDataSourceImpl::InternalDataSource : public URLDataSource {
30 // content::URLDataSource.
31 class ChromeWebUIDataSource::InternalDataSource
32 : public content::URLDataSource {
33 public: 30 public:
34 InternalDataSource(ChromeWebUIDataSource* parent) : parent_(parent) { 31 InternalDataSource(WebUIDataSourceImpl* parent) : parent_(parent) {
35 } 32 }
36 33
37 ~InternalDataSource() { 34 ~InternalDataSource() {
38 } 35 }
39 36
40 // content::URLDataSource implementation. 37 // URLDataSource implementation.
41 virtual std::string GetSource() OVERRIDE { 38 virtual std::string GetSource() OVERRIDE {
42 return parent_->GetSource(); 39 return parent_->GetSource();
43 } 40 }
44 virtual std::string GetMimeType(const std::string& path) const OVERRIDE { 41 virtual std::string GetMimeType(const std::string& path) const OVERRIDE {
45 return parent_->GetMimeType(path); 42 return parent_->GetMimeType(path);
46 } 43 }
47 virtual void StartDataRequest( 44 virtual void StartDataRequest(
48 const std::string& path, 45 const std::string& path,
49 bool is_incognito, 46 bool is_incognito,
50 const content::URLDataSource::GotDataCallback& callback) OVERRIDE { 47 const URLDataSource::GotDataCallback& callback) OVERRIDE {
51 return parent_->StartDataRequest(path, is_incognito, callback); 48 return parent_->StartDataRequest(path, is_incognito, callback);
52 } 49 }
53 virtual bool ShouldAddContentSecurityPolicy() const OVERRIDE { 50 virtual bool ShouldAddContentSecurityPolicy() const OVERRIDE {
54 return parent_->add_csp_; 51 return parent_->add_csp_;
55 } 52 }
56 virtual std::string GetContentSecurityPolicyObjectSrc() const OVERRIDE { 53 virtual std::string GetContentSecurityPolicyObjectSrc() const OVERRIDE {
57 if (parent_->object_src_set_) 54 if (parent_->object_src_set_)
58 return parent_->object_src_; 55 return parent_->object_src_;
59 return content::URLDataSource::GetContentSecurityPolicyObjectSrc(); 56 return URLDataSource::GetContentSecurityPolicyObjectSrc();
60 } 57 }
61 virtual std::string GetContentSecurityPolicyFrameSrc() const OVERRIDE { 58 virtual std::string GetContentSecurityPolicyFrameSrc() const OVERRIDE {
62 if (parent_->frame_src_set_) 59 if (parent_->frame_src_set_)
63 return parent_->frame_src_; 60 return parent_->frame_src_;
64 return content::URLDataSource::GetContentSecurityPolicyFrameSrc(); 61 return URLDataSource::GetContentSecurityPolicyFrameSrc();
65 } 62 }
66 virtual bool ShouldDenyXFrameOptions() const OVERRIDE { 63 virtual bool ShouldDenyXFrameOptions() const OVERRIDE {
67 return parent_->deny_xframe_options_; 64 return parent_->deny_xframe_options_;
68 } 65 }
69 66
70 private: 67 private:
71 ChromeWebUIDataSource* parent_; 68 WebUIDataSourceImpl* parent_;
72 }; 69 };
73 70
74 ChromeWebUIDataSource::ChromeWebUIDataSource(const std::string& source_name) 71 WebUIDataSourceImpl::WebUIDataSourceImpl(const std::string& source_name)
75 : URLDataSourceImpl( 72 : URLDataSourceImpl(
76 source_name, 73 source_name,
77 new InternalDataSource(ALLOW_THIS_IN_INITIALIZER_LIST(this))), 74 new InternalDataSource(ALLOW_THIS_IN_INITIALIZER_LIST(this))),
78 source_name_(source_name), 75 source_name_(source_name),
79 default_resource_(-1), 76 default_resource_(-1),
80 json_js_format_v2_(false), 77 json_js_format_v2_(false),
81 add_csp_(true), 78 add_csp_(true),
82 object_src_set_(false), 79 object_src_set_(false),
83 frame_src_set_(false), 80 frame_src_set_(false),
84 deny_xframe_options_(true), 81 deny_xframe_options_(true),
85 disable_set_font_strings_(false) { 82 disable_set_font_strings_(false) {
86 } 83 }
87 84
88 ChromeWebUIDataSource::~ChromeWebUIDataSource() { 85 WebUIDataSourceImpl::~WebUIDataSourceImpl() {
89 } 86 }
90 87
91 void ChromeWebUIDataSource::AddString(const std::string& name, 88 void WebUIDataSourceImpl::AddString(const std::string& name,
92 const string16& value) { 89 const string16& value) {
93 localized_strings_.SetString(name, value); 90 localized_strings_.SetString(name, value);
94 } 91 }
95 92
96 void ChromeWebUIDataSource::AddString(const std::string& name, 93 void WebUIDataSourceImpl::AddString(const std::string& name,
97 const std::string& value) { 94 const std::string& value) {
98 localized_strings_.SetString(name, value); 95 localized_strings_.SetString(name, value);
99 } 96 }
100 97
101 void ChromeWebUIDataSource::AddLocalizedString(const std::string& name, 98 void WebUIDataSourceImpl::AddLocalizedString(const std::string& name,
102 int ids) { 99 int ids) {
103 localized_strings_.SetString( 100 localized_strings_.SetString(
104 name, content::GetContentClient()->GetLocalizedString(ids)); 101 name, GetContentClient()->GetLocalizedString(ids));
105 } 102 }
106 103
107 void ChromeWebUIDataSource::AddLocalizedStrings( 104 void WebUIDataSourceImpl::AddLocalizedStrings(
108 const DictionaryValue& localized_strings) { 105 const DictionaryValue& localized_strings) {
109 localized_strings_.MergeDictionary(&localized_strings); 106 localized_strings_.MergeDictionary(&localized_strings);
110 } 107 }
111 108
112 void ChromeWebUIDataSource::AddBoolean(const std::string& name, bool value) { 109 void WebUIDataSourceImpl::AddBoolean(const std::string& name, bool value) {
113 localized_strings_.SetBoolean(name, value); 110 localized_strings_.SetBoolean(name, value);
114 } 111 }
115 112
116 void ChromeWebUIDataSource::SetJsonPath(const std::string& path) { 113 void WebUIDataSourceImpl::SetJsonPath(const std::string& path) {
117 json_path_ = path; 114 json_path_ = path;
118 } 115 }
119 116
120 void ChromeWebUIDataSource::SetUseJsonJSFormatV2() { 117 void WebUIDataSourceImpl::SetUseJsonJSFormatV2() {
121 json_js_format_v2_ = true; 118 json_js_format_v2_ = true;
122 } 119 }
123 120
124 void ChromeWebUIDataSource::AddResourcePath(const std::string &path, 121 void WebUIDataSourceImpl::AddResourcePath(const std::string &path,
125 int resource_id) { 122 int resource_id) {
126 path_to_idr_map_[path] = resource_id; 123 path_to_idr_map_[path] = resource_id;
127 } 124 }
128 125
129 void ChromeWebUIDataSource::SetDefaultResource(int resource_id) { 126 void WebUIDataSourceImpl::SetDefaultResource(int resource_id) {
130 default_resource_ = resource_id; 127 default_resource_ = resource_id;
131 } 128 }
132 129
133 void ChromeWebUIDataSource::SetRequestFilter( 130 void WebUIDataSourceImpl::SetRequestFilter(
134 const content::WebUIDataSource::HandleRequestCallback& callback) { 131 const WebUIDataSource::HandleRequestCallback& callback) {
135 filter_callback_ = callback; 132 filter_callback_ = callback;
136 } 133 }
137 134
138 void ChromeWebUIDataSource::DisableContentSecurityPolicy() { 135 void WebUIDataSourceImpl::DisableContentSecurityPolicy() {
139 add_csp_ = false; 136 add_csp_ = false;
140 } 137 }
141 138
142 void ChromeWebUIDataSource::OverrideContentSecurityPolicyObjectSrc( 139 void WebUIDataSourceImpl::OverrideContentSecurityPolicyObjectSrc(
143 const std::string& data) { 140 const std::string& data) {
144 object_src_set_ = true; 141 object_src_set_ = true;
145 object_src_ = data; 142 object_src_ = data;
146 } 143 }
147 144
148 void ChromeWebUIDataSource::OverrideContentSecurityPolicyFrameSrc( 145 void WebUIDataSourceImpl::OverrideContentSecurityPolicyFrameSrc(
149 const std::string& data) { 146 const std::string& data) {
150 frame_src_set_ = true; 147 frame_src_set_ = true;
151 frame_src_ = data; 148 frame_src_ = data;
152 } 149 }
153 150
154 void ChromeWebUIDataSource::DisableDenyXFrameOptions() { 151 void WebUIDataSourceImpl::DisableDenyXFrameOptions() {
155 deny_xframe_options_ = false; 152 deny_xframe_options_ = false;
156 } 153 }
157 154
158 std::string ChromeWebUIDataSource::GetSource() { 155 std::string WebUIDataSourceImpl::GetSource() {
159 return source_name_; 156 return source_name_;
160 } 157 }
161 158
162 std::string ChromeWebUIDataSource::GetMimeType(const std::string& path) const { 159 std::string WebUIDataSourceImpl::GetMimeType(const std::string& path) const {
163 if (EndsWith(path, ".js", false)) 160 if (EndsWith(path, ".js", false))
164 return "application/javascript"; 161 return "application/javascript";
165 162
166 if (EndsWith(path, ".json", false)) 163 if (EndsWith(path, ".json", false))
167 return "application/json"; 164 return "application/json";
168 165
169 if (EndsWith(path, ".pdf", false)) 166 if (EndsWith(path, ".pdf", false))
170 return "application/pdf"; 167 return "application/pdf";
171 168
172 return "text/html"; 169 return "text/html";
173 } 170 }
174 171
175 void ChromeWebUIDataSource::StartDataRequest( 172 void WebUIDataSourceImpl::StartDataRequest(
176 const std::string& path, 173 const std::string& path,
177 bool is_incognito, 174 bool is_incognito,
178 const content::URLDataSource::GotDataCallback& callback) { 175 const URLDataSource::GotDataCallback& callback) {
179 if (!filter_callback_.is_null() && 176 if (!filter_callback_.is_null() &&
180 filter_callback_.Run(path, callback)) { 177 filter_callback_.Run(path, callback)) {
181 return; 178 return;
182 } 179 }
183 180
184 if (!json_path_.empty() && path == json_path_) { 181 if (!json_path_.empty() && path == json_path_) {
185 SendLocalizedStringsAsJSON(callback); 182 SendLocalizedStringsAsJSON(callback);
186 return; 183 return;
187 } 184 }
188 185
189 int resource_id = default_resource_; 186 int resource_id = default_resource_;
190 std::map<std::string, int>::iterator result; 187 std::map<std::string, int>::iterator result;
191 result = path_to_idr_map_.find(path); 188 result = path_to_idr_map_.find(path);
192 if (result != path_to_idr_map_.end()) 189 if (result != path_to_idr_map_.end())
193 resource_id = result->second; 190 resource_id = result->second;
194 DCHECK_NE(resource_id, -1); 191 DCHECK_NE(resource_id, -1);
195 SendFromResourceBundle(callback, resource_id); 192 SendFromResourceBundle(callback, resource_id);
196 } 193 }
197 194
198 void ChromeWebUIDataSource::SendLocalizedStringsAsJSON( 195 void WebUIDataSourceImpl::SendLocalizedStringsAsJSON(
199 const content::URLDataSource::GotDataCallback& callback) { 196 const URLDataSource::GotDataCallback& callback) {
200 std::string template_data; 197 std::string template_data;
201 if (!disable_set_font_strings_) 198 if (!disable_set_font_strings_)
202 webui::SetFontAndTextDirection(&localized_strings_); 199 webui::SetFontAndTextDirection(&localized_strings_);
203 200
204 scoped_ptr<webui::UseVersion2> version2; 201 scoped_ptr<webui::UseVersion2> version2;
205 if (json_js_format_v2_) 202 if (json_js_format_v2_)
206 version2.reset(new webui::UseVersion2); 203 version2.reset(new webui::UseVersion2);
207 204
208 webui::AppendJsonJS(&localized_strings_, &template_data); 205 webui::AppendJsonJS(&localized_strings_, &template_data);
209 callback.Run(base::RefCountedString::TakeString(&template_data)); 206 callback.Run(base::RefCountedString::TakeString(&template_data));
210 } 207 }
211 208
212 void ChromeWebUIDataSource::SendFromResourceBundle( 209 void WebUIDataSourceImpl::SendFromResourceBundle(
213 const content::URLDataSource::GotDataCallback& callback, int idr) { 210 const URLDataSource::GotDataCallback& callback, int idr) {
214 scoped_refptr<base::RefCountedStaticMemory> response( 211 scoped_refptr<base::RefCountedStaticMemory> response(
215 content::GetContentClient()->GetDataResourceBytes(idr)); 212 GetContentClient()->GetDataResourceBytes(idr));
216 callback.Run(response); 213 callback.Run(response);
217 } 214 }
215
216 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/webui/web_ui_data_source_impl.h ('k') | content/browser/webui/web_ui_data_source_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698