| 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 "ppapi/thunk/thunk.h" | 5 #include "ppapi/thunk/thunk.h" |
| 6 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 6 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
| 7 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h" | 7 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h" |
| 8 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" | 8 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" |
| 9 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 9 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
| 10 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" | 10 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 WebString GetMethod() { | 83 WebString GetMethod() { |
| 84 WebURLRequest web_request = info_->ToWebURLRequest(frame_); | 84 WebURLRequest web_request = info_->ToWebURLRequest(frame_); |
| 85 return web_request.httpMethod(); | 85 return web_request.httpMethod(); |
| 86 } | 86 } |
| 87 | 87 |
| 88 WebString GetHeaderValue(const char* field) { | 88 WebString GetHeaderValue(const char* field) { |
| 89 WebURLRequest web_request = info_->ToWebURLRequest(frame_); | 89 WebURLRequest web_request = info_->ToWebURLRequest(frame_); |
| 90 return web_request.httpHeaderField(WebString::fromUTF8(field)); | 90 return web_request.httpHeaderField(WebString::fromUTF8(field)); |
| 91 } | 91 } |
| 92 | 92 |
| 93 bool SetBooleanProperty(PP_URLRequestProperty prop, bool b) { |
| 94 info_->SetBooleanProperty(prop, b); |
| 95 } |
| 96 bool SetStringProperty(PP_URLRequestProperty prop, const std::string& s) { |
| 97 info_->SetStringProperty(prop, s); |
| 98 } |
| 99 |
| 93 scoped_refptr<PPB_URLRequestInfo_Impl> info_; | 100 scoped_refptr<PPB_URLRequestInfo_Impl> info_; |
| 94 | 101 |
| 95 static TestWebFrameClient web_frame_client_; | 102 static TestWebFrameClient web_frame_client_; |
| 96 static WebView* web_view_; | 103 static WebView* web_view_; |
| 97 static WebFrame* frame_; | 104 static WebFrame* frame_; |
| 98 }; | 105 }; |
| 99 | 106 |
| 100 TestWebFrameClient URLRequestInfoTest::web_frame_client_; | 107 TestWebFrameClient URLRequestInfoTest::web_frame_client_; |
| 101 WebView* URLRequestInfoTest::web_view_; | 108 WebView* URLRequestInfoTest::web_view_; |
| 102 WebFrame* URLRequestInfoTest::frame_; | 109 WebFrame* URLRequestInfoTest::frame_; |
| 103 | 110 |
| 104 TEST_F(URLRequestInfoTest, GetInterface) { | 111 TEST_F(URLRequestInfoTest, GetInterface) { |
| 105 const PPB_URLRequestInfo* interface = | 112 const PPB_URLRequestInfo* interface = |
| 106 ::ppapi::thunk::GetPPB_URLRequestInfo_Thunk(); | 113 ::ppapi::thunk::GetPPB_URLRequestInfo_Thunk(); |
| 107 ASSERT_TRUE(interface); | 114 ASSERT_TRUE(interface); |
| 108 ASSERT_TRUE(interface->Create); | 115 ASSERT_TRUE(interface->Create); |
| 109 ASSERT_TRUE(interface->IsURLRequestInfo); | 116 ASSERT_TRUE(interface->IsURLRequestInfo); |
| 110 ASSERT_TRUE(interface->SetProperty); | 117 ASSERT_TRUE(interface->SetProperty); |
| 111 ASSERT_TRUE(interface->AppendDataToBody); | 118 ASSERT_TRUE(interface->AppendDataToBody); |
| 112 ASSERT_TRUE(interface->AppendFileToBody); | 119 ASSERT_TRUE(interface->AppendFileToBody); |
| 113 ASSERT_TRUE(interface->Create); | 120 ASSERT_TRUE(interface->Create); |
| 114 ASSERT_TRUE(interface->Create); | 121 ASSERT_TRUE(interface->Create); |
| 115 } | 122 } |
| 116 | 123 |
| 117 TEST_F(URLRequestInfoTest, AsURLRequestInfo) { | 124 TEST_F(URLRequestInfoTest, AsURLRequestInfo) { |
| 118 ASSERT_EQ(info_, info_->AsPPB_URLRequestInfo_API()); | 125 ASSERT_EQ(info_, info_->AsPPB_URLRequestInfo_API()); |
| 119 } | 126 } |
| 120 | 127 |
| 121 TEST_F(URLRequestInfoTest, StreamToFile) { | 128 TEST_F(URLRequestInfoTest, StreamToFile) { |
| 122 info_->SetStringProperty(PP_URLREQUESTPROPERTY_URL, "http://www.google.com"); | 129 SetStringProperty(PP_URLREQUESTPROPERTY_URL, "http://www.google.com"); |
| 123 | 130 |
| 124 ASSERT_FALSE(GetDownloadToFile()); | 131 ASSERT_FALSE(GetDownloadToFile()); |
| 125 | 132 |
| 126 ASSERT_TRUE(info_->SetBooleanProperty( | 133 ASSERT_TRUE(SetBooleanProperty( |
| 127 PP_URLREQUESTPROPERTY_STREAMTOFILE, true)); | 134 PP_URLREQUESTPROPERTY_STREAMTOFILE, true)); |
| 128 ASSERT_TRUE(GetDownloadToFile()); | 135 ASSERT_TRUE(GetDownloadToFile()); |
| 129 | 136 |
| 130 ASSERT_TRUE(info_->SetBooleanProperty( | 137 ASSERT_TRUE(SetBooleanProperty( |
| 131 PP_URLREQUESTPROPERTY_STREAMTOFILE, false)); | 138 PP_URLREQUESTPROPERTY_STREAMTOFILE, false)); |
| 132 ASSERT_FALSE(GetDownloadToFile()); | 139 ASSERT_FALSE(GetDownloadToFile()); |
| 133 } | 140 } |
| 134 | 141 |
| 135 TEST_F(URLRequestInfoTest, FollowRedirects) { | 142 TEST_F(URLRequestInfoTest, FollowRedirects) { |
| 136 ASSERT_TRUE(info_->follow_redirects()); | 143 ASSERT_TRUE(info_->follow_redirects()); |
| 137 | 144 |
| 138 ASSERT_TRUE(info_->SetBooleanProperty( | 145 ASSERT_TRUE(SetBooleanProperty( |
| 139 PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, false)); | 146 PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, false)); |
| 140 ASSERT_FALSE(info_->follow_redirects()); | 147 ASSERT_FALSE(info_->follow_redirects()); |
| 141 | 148 |
| 142 ASSERT_TRUE(info_->SetBooleanProperty( | 149 ASSERT_TRUE(SetBooleanProperty( |
| 143 PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, true)); | 150 PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, true)); |
| 144 ASSERT_TRUE(info_->follow_redirects()); | 151 ASSERT_TRUE(info_->follow_redirects()); |
| 145 } | 152 } |
| 146 | 153 |
| 147 TEST_F(URLRequestInfoTest, RecordDownloadProgress) { | 154 TEST_F(URLRequestInfoTest, RecordDownloadProgress) { |
| 148 ASSERT_FALSE(info_->record_download_progress()); | 155 ASSERT_FALSE(info_->record_download_progress()); |
| 149 | 156 |
| 150 ASSERT_TRUE(info_->SetBooleanProperty( | 157 ASSERT_TRUE(SetBooleanProperty( |
| 151 PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, true)); | 158 PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, true)); |
| 152 ASSERT_TRUE(info_->record_download_progress()); | 159 ASSERT_TRUE(info_->record_download_progress()); |
| 153 | 160 |
| 154 ASSERT_TRUE(info_->SetBooleanProperty( | 161 ASSERT_TRUE(SetBooleanProperty( |
| 155 PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, false)); | 162 PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, false)); |
| 156 ASSERT_FALSE(info_->record_download_progress()); | 163 ASSERT_FALSE(info_->record_download_progress()); |
| 157 } | 164 } |
| 158 | 165 |
| 159 TEST_F(URLRequestInfoTest, RecordUploadProgress) { | 166 TEST_F(URLRequestInfoTest, RecordUploadProgress) { |
| 160 ASSERT_FALSE(info_->record_upload_progress()); | 167 ASSERT_FALSE(info_->record_upload_progress()); |
| 161 | 168 |
| 162 ASSERT_TRUE(info_->SetBooleanProperty( | 169 ASSERT_TRUE(SetBooleanProperty( |
| 163 PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, true)); | 170 PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, true)); |
| 164 ASSERT_TRUE(info_->record_upload_progress()); | 171 ASSERT_TRUE(info_->record_upload_progress()); |
| 165 | 172 |
| 166 ASSERT_TRUE(info_->SetBooleanProperty( | 173 ASSERT_TRUE(SetBooleanProperty( |
| 167 PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, false)); | 174 PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, false)); |
| 168 ASSERT_FALSE(info_->record_upload_progress()); | 175 ASSERT_FALSE(info_->record_upload_progress()); |
| 169 } | 176 } |
| 170 | 177 |
| 171 TEST_F(URLRequestInfoTest, AllowCrossOriginRequests) { | 178 TEST_F(URLRequestInfoTest, AllowCrossOriginRequests) { |
| 172 ASSERT_FALSE(info_->allow_cross_origin_requests()); | 179 ASSERT_FALSE(info_->allow_cross_origin_requests()); |
| 173 | 180 |
| 174 ASSERT_TRUE(info_->SetBooleanProperty( | 181 ASSERT_TRUE(SetBooleanProperty( |
| 175 PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS, true)); | 182 PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS, true)); |
| 176 ASSERT_TRUE(info_->allow_cross_origin_requests()); | 183 ASSERT_TRUE(info_->allow_cross_origin_requests()); |
| 177 | 184 |
| 178 ASSERT_TRUE(info_->SetBooleanProperty( | 185 ASSERT_TRUE(SetBooleanProperty( |
| 179 PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS, false)); | 186 PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS, false)); |
| 180 ASSERT_FALSE(info_->allow_cross_origin_requests()); | 187 ASSERT_FALSE(info_->allow_cross_origin_requests()); |
| 181 } | 188 } |
| 182 | 189 |
| 183 TEST_F(URLRequestInfoTest, AllowCredentials) { | 190 TEST_F(URLRequestInfoTest, AllowCredentials) { |
| 184 ASSERT_FALSE(info_->allow_credentials()); | 191 ASSERT_FALSE(info_->allow_credentials()); |
| 185 | 192 |
| 186 ASSERT_TRUE(info_->SetBooleanProperty( | 193 ASSERT_TRUE(SetBooleanProperty( |
| 187 PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, true)); | 194 PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, true)); |
| 188 ASSERT_TRUE(info_->allow_credentials()); | 195 ASSERT_TRUE(info_->allow_credentials()); |
| 189 | 196 |
| 190 ASSERT_TRUE(info_->SetBooleanProperty( | 197 ASSERT_TRUE(SetBooleanProperty( |
| 191 PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, false)); | 198 PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, false)); |
| 192 ASSERT_FALSE(info_->allow_credentials()); | 199 ASSERT_FALSE(info_->allow_credentials()); |
| 193 } | 200 } |
| 194 | 201 |
| 195 TEST_F(URLRequestInfoTest, SetURL) { | 202 TEST_F(URLRequestInfoTest, SetURL) { |
| 196 // Test default URL is "about:blank". | 203 // Test default URL is "about:blank". |
| 197 ASSERT_TRUE(IsExpected(GetURL(), "about:blank")); | 204 ASSERT_TRUE(IsExpected(GetURL(), "about:blank")); |
| 198 | 205 |
| 199 const char* url = "http://www.google.com/"; | 206 const char* url = "http://www.google.com/"; |
| 200 ASSERT_TRUE(info_->SetStringProperty( | 207 ASSERT_TRUE(SetStringProperty( |
| 201 PP_URLREQUESTPROPERTY_URL, url)); | 208 PP_URLREQUESTPROPERTY_URL, url)); |
| 202 ASSERT_TRUE(IsExpected(GetURL(), url)); | 209 ASSERT_TRUE(IsExpected(GetURL(), url)); |
| 203 } | 210 } |
| 204 | 211 |
| 205 TEST_F(URLRequestInfoTest, JavascriptURL) { | 212 TEST_F(URLRequestInfoTest, JavascriptURL) { |
| 206 const char* url = "javascript:foo = bar"; | 213 const char* url = "javascript:foo = bar"; |
| 207 ASSERT_FALSE(info_->RequiresUniversalAccess()); | 214 ASSERT_FALSE(info_->RequiresUniversalAccess()); |
| 208 info_->SetStringProperty(PP_URLREQUESTPROPERTY_URL, url); | 215 SetStringProperty(PP_URLREQUESTPROPERTY_URL, url); |
| 209 ASSERT_TRUE(info_->RequiresUniversalAccess()); | 216 ASSERT_TRUE(info_->RequiresUniversalAccess()); |
| 210 } | 217 } |
| 211 | 218 |
| 212 TEST_F(URLRequestInfoTest, SetMethod) { | 219 TEST_F(URLRequestInfoTest, SetMethod) { |
| 213 // Test default method is "GET". | 220 // Test default method is "GET". |
| 214 ASSERT_TRUE(IsExpected(GetMethod(), "GET")); | 221 ASSERT_TRUE(IsExpected(GetMethod(), "GET")); |
| 215 ASSERT_TRUE(info_->SetStringProperty( | 222 ASSERT_TRUE(SetStringProperty( |
| 216 PP_URLREQUESTPROPERTY_METHOD, "POST")); | 223 PP_URLREQUESTPROPERTY_METHOD, "POST")); |
| 217 ASSERT_TRUE(IsExpected(GetMethod(), "POST")); | 224 ASSERT_TRUE(IsExpected(GetMethod(), "POST")); |
| 218 | 225 |
| 219 // Test that method names are converted to upper case. | 226 // Test that method names are converted to upper case. |
| 220 ASSERT_TRUE(info_->SetStringProperty( | 227 ASSERT_TRUE(SetStringProperty( |
| 221 PP_URLREQUESTPROPERTY_METHOD, "get")); | 228 PP_URLREQUESTPROPERTY_METHOD, "get")); |
| 222 ASSERT_TRUE(IsExpected(GetMethod(), "GET")); | 229 ASSERT_TRUE(IsExpected(GetMethod(), "GET")); |
| 223 ASSERT_TRUE(info_->SetStringProperty( | 230 ASSERT_TRUE(SetStringProperty( |
| 224 PP_URLREQUESTPROPERTY_METHOD, "post")); | 231 PP_URLREQUESTPROPERTY_METHOD, "post")); |
| 225 ASSERT_TRUE(IsExpected(GetMethod(), "POST")); | 232 ASSERT_TRUE(IsExpected(GetMethod(), "POST")); |
| 226 } | 233 } |
| 227 | 234 |
| 228 TEST_F(URLRequestInfoTest, SetInvalidMethod) { | 235 TEST_F(URLRequestInfoTest, SetInvalidMethod) { |
| 229 ASSERT_FALSE(info_->SetStringProperty( | 236 ASSERT_FALSE(SetStringProperty( |
| 230 PP_URLREQUESTPROPERTY_METHOD, "CONNECT")); | 237 PP_URLREQUESTPROPERTY_METHOD, "CONNECT")); |
| 231 ASSERT_FALSE(info_->SetStringProperty( | 238 ASSERT_FALSE(SetStringProperty( |
| 232 PP_URLREQUESTPROPERTY_METHOD, "connect")); | 239 PP_URLREQUESTPROPERTY_METHOD, "connect")); |
| 233 ASSERT_FALSE(info_->SetStringProperty( | 240 ASSERT_FALSE(SetStringProperty( |
| 234 PP_URLREQUESTPROPERTY_METHOD, "TRACE")); | 241 PP_URLREQUESTPROPERTY_METHOD, "TRACE")); |
| 235 ASSERT_FALSE(info_->SetStringProperty( | 242 ASSERT_FALSE(SetStringProperty( |
| 236 PP_URLREQUESTPROPERTY_METHOD, "trace")); | 243 PP_URLREQUESTPROPERTY_METHOD, "trace")); |
| 237 ASSERT_FALSE(info_->SetStringProperty( | 244 ASSERT_FALSE(SetStringProperty( |
| 238 PP_URLREQUESTPROPERTY_METHOD, "TRACK")); | 245 PP_URLREQUESTPROPERTY_METHOD, "TRACK")); |
| 239 ASSERT_FALSE(info_->SetStringProperty( | 246 ASSERT_FALSE(SetStringProperty( |
| 240 PP_URLREQUESTPROPERTY_METHOD, "track")); | 247 PP_URLREQUESTPROPERTY_METHOD, "track")); |
| 241 | 248 |
| 242 ASSERT_FALSE(info_->SetStringProperty( | 249 ASSERT_FALSE(SetStringProperty( |
| 243 PP_URLREQUESTPROPERTY_METHOD, "POST\x0d\x0ax-csrf-token:\x20test1234")); | 250 PP_URLREQUESTPROPERTY_METHOD, "POST\x0d\x0ax-csrf-token:\x20test1234")); |
| 244 } | 251 } |
| 245 | 252 |
| 246 TEST_F(URLRequestInfoTest, SetValidHeaders) { | 253 TEST_F(URLRequestInfoTest, SetValidHeaders) { |
| 247 // Test default header field. | 254 // Test default header field. |
| 248 ASSERT_TRUE(IsExpected( | 255 ASSERT_TRUE(IsExpected( |
| 249 GetHeaderValue("foo"), "")); | 256 GetHeaderValue("foo"), "")); |
| 250 // Test that we can set a header field. | 257 // Test that we can set a header field. |
| 251 ASSERT_TRUE(info_->SetStringProperty( | 258 ASSERT_TRUE(SetStringProperty( |
| 252 PP_URLREQUESTPROPERTY_HEADERS, "foo: bar")); | 259 PP_URLREQUESTPROPERTY_HEADERS, "foo: bar")); |
| 253 ASSERT_TRUE(IsExpected( | 260 ASSERT_TRUE(IsExpected( |
| 254 GetHeaderValue("foo"), "bar")); | 261 GetHeaderValue("foo"), "bar")); |
| 255 // Test that we can set multiple header fields using \n delimiter. | 262 // Test that we can set multiple header fields using \n delimiter. |
| 256 ASSERT_TRUE(info_->SetStringProperty( | 263 ASSERT_TRUE(SetStringProperty( |
| 257 PP_URLREQUESTPROPERTY_HEADERS, "foo: bar\nbar: baz")); | 264 PP_URLREQUESTPROPERTY_HEADERS, "foo: bar\nbar: baz")); |
| 258 ASSERT_TRUE(IsExpected( | 265 ASSERT_TRUE(IsExpected( |
| 259 GetHeaderValue("foo"), "bar")); | 266 GetHeaderValue("foo"), "bar")); |
| 260 ASSERT_TRUE(IsExpected( | 267 ASSERT_TRUE(IsExpected( |
| 261 GetHeaderValue("bar"), "baz")); | 268 GetHeaderValue("bar"), "baz")); |
| 262 } | 269 } |
| 263 | 270 |
| 264 TEST_F(URLRequestInfoTest, SetInvalidHeaders) { | 271 TEST_F(URLRequestInfoTest, SetInvalidHeaders) { |
| 265 const char* const kForbiddenHeaderFields[] = { | 272 const char* const kForbiddenHeaderFields[] = { |
| 266 "accept-charset", | 273 "accept-charset", |
| (...skipping 17 matching lines...) Expand all Loading... |
| 284 "via", | 291 "via", |
| 285 | 292 |
| 286 "proxy-foo", // Test for any header starting with proxy- or sec-. | 293 "proxy-foo", // Test for any header starting with proxy- or sec-. |
| 287 "sec-foo", | 294 "sec-foo", |
| 288 }; | 295 }; |
| 289 | 296 |
| 290 // Test that no forbidden header fields can be set. | 297 // Test that no forbidden header fields can be set. |
| 291 for (size_t i = 0; i < arraysize(kForbiddenHeaderFields); ++i) { | 298 for (size_t i = 0; i < arraysize(kForbiddenHeaderFields); ++i) { |
| 292 std::string headers(kForbiddenHeaderFields[i]); | 299 std::string headers(kForbiddenHeaderFields[i]); |
| 293 headers.append(": foo"); | 300 headers.append(": foo"); |
| 294 ASSERT_FALSE(info_->SetStringProperty( | 301 ASSERT_FALSE(SetStringProperty( |
| 295 PP_URLREQUESTPROPERTY_HEADERS, headers.c_str())); | 302 PP_URLREQUESTPROPERTY_HEADERS, headers.c_str())); |
| 296 ASSERT_TRUE(IsNullOrEmpty(GetHeaderValue(kForbiddenHeaderFields[i]))); | 303 ASSERT_TRUE(IsNullOrEmpty(GetHeaderValue(kForbiddenHeaderFields[i]))); |
| 297 } | 304 } |
| 298 | 305 |
| 299 // Test that forbidden header can't be set in various ways. | 306 // Test that forbidden header can't be set in various ways. |
| 300 ASSERT_FALSE(info_->SetStringProperty( | 307 ASSERT_FALSE(SetStringProperty( |
| 301 PP_URLREQUESTPROPERTY_HEADERS, "cookie : foo")); | 308 PP_URLREQUESTPROPERTY_HEADERS, "cookie : foo")); |
| 302 ASSERT_TRUE(IsNullOrEmpty(GetHeaderValue("cookie"))); | 309 ASSERT_TRUE(IsNullOrEmpty(GetHeaderValue("cookie"))); |
| 303 | 310 |
| 304 // Test that forbidden header can't be set with an allowed one. | 311 // Test that forbidden header can't be set with an allowed one. |
| 305 ASSERT_FALSE(info_->SetStringProperty( | 312 ASSERT_FALSE(SetStringProperty( |
| 306 PP_URLREQUESTPROPERTY_HEADERS, "foo: bar\ncookie: foo")); | 313 PP_URLREQUESTPROPERTY_HEADERS, "foo: bar\ncookie: foo")); |
| 307 ASSERT_TRUE(IsNullOrEmpty(GetHeaderValue("cookie"))); | 314 ASSERT_TRUE(IsNullOrEmpty(GetHeaderValue("cookie"))); |
| 308 } | 315 } |
| 309 | 316 |
| 310 // TODO(bbudge) Unit tests for AppendDataToBody, AppendFileToBody. | 317 // TODO(bbudge) Unit tests for AppendDataToBody, AppendFileToBody. |
| 311 | 318 |
| 312 } // namespace ppapi | 319 } // namespace ppapi |
| 313 } // namespace webkit | 320 } // namespace webkit |
| 314 | 321 |
| OLD | NEW |