summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy/url_response_info_resource.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ppapi/proxy/url_response_info_resource.cc')
-rw-r--r--ppapi/proxy/url_response_info_resource.cc82
1 files changed, 82 insertions, 0 deletions
diff --git a/ppapi/proxy/url_response_info_resource.cc b/ppapi/proxy/url_response_info_resource.cc
new file mode 100644
index 0000000..91c9990
--- /dev/null
+++ b/ppapi/proxy/url_response_info_resource.cc
@@ -0,0 +1,82 @@
+// 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 "ppapi/proxy/url_response_info_resource.h"
+
+#include "ppapi/proxy/ppb_file_ref_proxy.h"
+#include "ppapi/shared_impl/var.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/resource_creation_api.h"
+
+namespace ppapi {
+namespace proxy {
+
+namespace {
+
+bool IsRedirect(int32_t status) {
+ return status >= 300 && status <= 399;
+}
+
+} // namespace
+
+URLResponseInfoResource::URLResponseInfoResource(
+ Connection connection,
+ PP_Instance instance,
+ const URLResponseInfoData& data,
+ PP_Resource file_ref_resource)
+ : PluginResource(connection, instance),
+ data_(data),
+ body_as_file_ref_(ScopedPPResource::PassRef(), file_ref_resource) {
+}
+
+URLResponseInfoResource::~URLResponseInfoResource() {
+}
+
+thunk::PPB_URLResponseInfo_API*
+URLResponseInfoResource::AsPPB_URLResponseInfo_API() {
+ return this;
+}
+
+PP_Var URLResponseInfoResource::GetProperty(PP_URLResponseProperty property) {
+ switch (property) {
+ case PP_URLRESPONSEPROPERTY_URL:
+ return StringVar::StringToPPVar(data_.url);
+ case PP_URLRESPONSEPROPERTY_REDIRECTURL:
+ if (IsRedirect(data_.status_code))
+ return StringVar::StringToPPVar(data_.redirect_url);
+ break;
+ case PP_URLRESPONSEPROPERTY_REDIRECTMETHOD:
+ if (IsRedirect(data_.status_code))
+ return StringVar::StringToPPVar(data_.status_text);
+ break;
+ case PP_URLRESPONSEPROPERTY_STATUSCODE:
+ return PP_MakeInt32(data_.status_code);
+ case PP_URLRESPONSEPROPERTY_STATUSLINE:
+ return StringVar::StringToPPVar(data_.status_text);
+ case PP_URLRESPONSEPROPERTY_HEADERS:
+ return StringVar::StringToPPVar(data_.headers);
+ }
+ // The default is to return an undefined PP_Var.
+ return PP_MakeUndefined();
+}
+
+PP_Resource URLResponseInfoResource::GetBodyAsFileRef() {
+ if (!body_as_file_ref_.get())
+ return 0;
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(
+ body_as_file_ref_.get());
+ return body_as_file_ref_.get();
+}
+
+URLResponseInfoData URLResponseInfoResource::GetData() {
+ // One ref is passed to the caller if there's a file ref.
+ if (body_as_file_ref_.get()) {
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(
+ body_as_file_ref_.get());
+ }
+ return data_;
+}
+
+} // namespace proxy
+} // namespace ppapi