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