Home | History | Annotate | Download | only in proxy
      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
      3 // found in the LICENSE file.
      4 
      5 #include "ppapi/proxy/url_response_info_resource.h"
      6 
      7 #include "ppapi/proxy/file_ref_resource.h"
      8 #include "ppapi/shared_impl/var.h"
      9 #include "ppapi/thunk/enter.h"
     10 #include "ppapi/thunk/resource_creation_api.h"
     11 
     12 namespace ppapi {
     13 namespace proxy {
     14 
     15 namespace {
     16 
     17 bool IsRedirect(int32_t status) {
     18   return status >= 300 && status <= 399;
     19 }
     20 
     21 }  // namespace
     22 
     23 URLResponseInfoResource::URLResponseInfoResource(
     24     Connection connection,
     25     PP_Instance instance,
     26     const URLResponseInfoData& data,
     27     PP_Resource file_ref_resource)
     28     : PluginResource(connection, instance),
     29       data_(data),
     30       body_as_file_ref_(ScopedPPResource::PassRef(), file_ref_resource) {
     31 }
     32 
     33 URLResponseInfoResource::~URLResponseInfoResource() {
     34 }
     35 
     36 thunk::PPB_URLResponseInfo_API*
     37 URLResponseInfoResource::AsPPB_URLResponseInfo_API() {
     38   return this;
     39 }
     40 
     41 PP_Var URLResponseInfoResource::GetProperty(PP_URLResponseProperty property) {
     42   switch (property) {
     43     case PP_URLRESPONSEPROPERTY_URL:
     44       return StringVar::StringToPPVar(data_.url);
     45     case PP_URLRESPONSEPROPERTY_REDIRECTURL:
     46       if (IsRedirect(data_.status_code))
     47         return StringVar::StringToPPVar(data_.redirect_url);
     48       break;
     49     case PP_URLRESPONSEPROPERTY_REDIRECTMETHOD:
     50       if (IsRedirect(data_.status_code))
     51         return StringVar::StringToPPVar(data_.status_text);
     52       break;
     53     case PP_URLRESPONSEPROPERTY_STATUSCODE:
     54       return PP_MakeInt32(data_.status_code);
     55     case PP_URLRESPONSEPROPERTY_STATUSLINE:
     56       return StringVar::StringToPPVar(data_.status_text);
     57     case PP_URLRESPONSEPROPERTY_HEADERS:
     58       return StringVar::StringToPPVar(data_.headers);
     59   }
     60   // The default is to return an undefined PP_Var.
     61   return PP_MakeUndefined();
     62 }
     63 
     64 PP_Resource URLResponseInfoResource::GetBodyAsFileRef() {
     65   if (!body_as_file_ref_.get())
     66     return 0;
     67   PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(
     68       body_as_file_ref_.get());
     69   return body_as_file_ref_.get();
     70 }
     71 
     72 }  // namespace proxy
     73 }  // namespace ppapi
     74