1c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com// Use of this source code is governed by a BSD-style license that can be
3c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com// found in the LICENSE file.
4c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com
5c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com#include "ppapi/proxy/url_response_info_resource.h"
6c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com
7c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com#include "ppapi/proxy/file_ref_resource.h"
8c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com#include "ppapi/shared_impl/var.h"
96680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com#include "ppapi/thunk/enter.h"
10c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com#include "ppapi/thunk/resource_creation_api.h"
11c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com
12c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.comnamespace ppapi {
13c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.comnamespace proxy {
14c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com
15c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.comnamespace {
16c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com
174917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.combool IsRedirect(int32_t status) {
18cef7e3fc4bc6223ab0e42ed754e2a09028479c0bcaryclark@google.com  return status >= 300 && status <= 399;
194917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com}
20c17972e7acc784553445adc18f608a8c4b1beac8caryclark@google.com
216680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com}  // namespace
22c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com
23c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.comURLResponseInfoResource::URLResponseInfoResource(
24c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com    Connection connection,
25c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com    PP_Instance instance,
26c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com    const URLResponseInfoData& data,
27c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com    PP_Resource file_ref_resource)
286680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com    : PluginResource(connection, instance),
29c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com      data_(data),
30c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com      body_as_file_ref_(ScopedPPResource::PassRef(), file_ref_resource) {
31c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com}
32c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com
33cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comURLResponseInfoResource::~URLResponseInfoResource() {
34cef7e3fc4bc6223ab0e42ed754e2a09028479c0bcaryclark@google.com}
35cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
36cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comthunk::PPB_URLResponseInfo_API*
37cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comURLResponseInfoResource::AsPPB_URLResponseInfo_API() {
38cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com  return this;
39cef7e3fc4bc6223ab0e42ed754e2a09028479c0bcaryclark@google.com}
40cef7e3fc4bc6223ab0e42ed754e2a09028479c0bcaryclark@google.com
416680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.comPP_Var URLResponseInfoResource::GetProperty(PP_URLResponseProperty property) {
426680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com  switch (property) {
436680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com    case PP_URLRESPONSEPROPERTY_URL:
446680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com      return StringVar::StringToPPVar(data_.url);
456680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com    case PP_URLRESPONSEPROPERTY_REDIRECTURL:
466680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com      if (IsRedirect(data_.status_code))
476680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com        return StringVar::StringToPPVar(data_.redirect_url);
486680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com      break;
496680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com    case PP_URLRESPONSEPROPERTY_REDIRECTMETHOD:
506680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com      if (IsRedirect(data_.status_code))
516680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com        return StringVar::StringToPPVar(data_.status_text);
526680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com      break;
536680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com    case PP_URLRESPONSEPROPERTY_STATUSCODE:
546680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com      return PP_MakeInt32(data_.status_code);
556680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com    case PP_URLRESPONSEPROPERTY_STATUSLINE:
566680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com      return StringVar::StringToPPVar(data_.status_text);
576680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com    case PP_URLRESPONSEPROPERTY_HEADERS:
586680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com      return StringVar::StringToPPVar(data_.headers);
596680fb1dc0ca55e5e3ddd41cb26dcd74fce28f6ecaryclark@google.com  }
60c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com  // The default is to return an undefined PP_Var.
61c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com  return PP_MakeUndefined();
62c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com}
63c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com
64c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.comPP_Resource URLResponseInfoResource::GetBodyAsFileRef() {
65c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com  if (!body_as_file_ref_.get())
66c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com    return 0;
67c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com  PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(
68c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com      body_as_file_ref_.get());
69c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com  return body_as_file_ref_.get();
70c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com}
71c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com
72c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com}  // namespace proxy
73c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com}  // namespace ppapi
74c682590538a27d73489bc91c098e000fdfb07ccfcaryclark@google.com