Index: webkit/plugins/ppapi/url_response_info_util.cc |
diff --git a/webkit/plugins/ppapi/url_response_info_util.cc b/webkit/plugins/ppapi/url_response_info_util.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8ef236314a1197d04ce07b55145eeb3e6142f5b1 |
--- /dev/null |
+++ b/webkit/plugins/ppapi/url_response_info_util.cc |
@@ -0,0 +1,78 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "webkit/plugins/ppapi/url_response_info_util.h" |
+ |
+#include "base/logging.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebHTTPHeaderVisitor.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLResponse.h" |
+#include "webkit/base/file_path_string_conversions.h" |
+#include "webkit/plugins/ppapi/ppb_file_ref_impl.h" |
+#include "webkit/glue/webkit_glue.h" |
+ |
+using WebKit::WebHTTPHeaderVisitor; |
+using WebKit::WebString; |
+using WebKit::WebURLResponse; |
+ |
+namespace webkit { |
+namespace ppapi { |
+ |
+namespace { |
+ |
+class HeaderFlattener : public WebHTTPHeaderVisitor { |
+ public: |
+ const std::string& buffer() const { return buffer_; } |
+ |
+ virtual void visitHeader(const WebString& name, const WebString& value) { |
+ if (!buffer_.empty()) |
+ buffer_.append("\n"); |
+ buffer_.append(name.utf8()); |
+ buffer_.append(": "); |
+ buffer_.append(value.utf8()); |
+ } |
+ |
+ private: |
+ std::string buffer_; |
+}; |
+ |
+bool IsRedirect(int32_t status) { |
+ return status >= 300 && status <= 399; |
+} |
+ |
+} // namespace |
+ |
+::ppapi::URLResponseInfoData DataFromWebURLResponse( |
+ PP_Instance pp_instance, |
+ const WebURLResponse& response) { |
+ ::ppapi::URLResponseInfoData data; |
+ |
+ data.url = response.url().spec(); |
+ data.status_code = response.httpStatusCode(); |
+ data.status_text = response.httpStatusText().utf8(); |
+ if (IsRedirect(data.status_code)) { |
+ data.redirect_url = response.httpHeaderField( |
+ WebString::fromUTF8("Location")).utf8(); |
+ } |
+ |
+ HeaderFlattener flattener; |
+ response.visitHTTPHeaderFields(&flattener); |
+ data.headers = flattener.buffer(); |
+ |
+ WebString file_path = response.downloadFilePath(); |
+ if (!file_path.isEmpty()) { |
+ scoped_refptr<PPB_FileRef_Impl> file_ref( |
+ PPB_FileRef_Impl::CreateExternal( |
+ pp_instance, |
+ webkit_base::WebStringToFilePath(file_path), |
+ std::string())); |
+ data.body_as_file_ref = file_ref->GetCreateInfo(); |
+ file_ref->GetReference(); // The returned data has one ref for the plugin. |
+ } |
+ return data; |
+} |
+ |
+} // namespace ppapi |
+} // namespace webkit |