1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <cstring> 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/dev/ppb_memory_dev.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_errors.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/ppb_image_data.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/pdf_resource.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/ppapi_proxy_test.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/ppb_image_data_proxy.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/serialized_handle.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/shared_impl/proxy_lock.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/shared_impl/scoped_pp_var.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/shared_impl/var.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/thunk/thunk.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace ppapi { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace proxy { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef PluginProxyTest PDFResourceTest; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PDFResourceTest, GetLocalizedString) { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string expected_string = "hello"; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiPluginMsg_PDF_GetLocalizedStringReply reply_msg(expected_string); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceSyncCallHandler handler( 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &sink(), 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiHostMsg_PDF_GetLocalizedString::ID, 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_OK, 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reply_msg); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sink().AddFilter(&handler); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Var var = pdf_iface->GetLocalizedString( 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pp_instance(), PP_RESOURCESTRING_PDFGETPASSWORD); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProxyAutoLock lock; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedPPVar release_var(ScopedPPVar::PassRef(), var); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StringVar* string_var = StringVar::FromPPVar(var); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(string_var != NULL); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string actual_string = string_var->value(); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(PpapiHostMsg_PDF_GetLocalizedString::ID, 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) handler.last_handled_msg().type()); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(expected_string, actual_string); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove the filter or it will be destroyed before the sink() is destroyed. 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sink().RemoveFilter(&handler); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PDFResourceTest, SearchString) { 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProxyAutoLock lock; 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Instantiate a resource explicitly so we can specify the locale. 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<PDFResource> pdf_resource( 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new PDFResource(Connection(&sink(), &sink()), pp_instance())); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pdf_resource->SetLocaleForTest("en-US"); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 input; 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 term; 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("abcdefabcdef", 12, &input); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("bc", 2, &term); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_PrivateFindResult* results; 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int count = 0; 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pdf_resource->SearchString( 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reinterpret_cast<const unsigned short*>(input.c_str()), 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reinterpret_cast<const unsigned short*>(term.c_str()), 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &results, 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &count); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(2, count); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(1, results[0].start_index); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(2, results[0].length); 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(7, results[1].start_index); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(2, results[1].length); 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PPB_Memory_Dev* memory_iface = thunk::GetPPB_Memory_Dev_0_1_Thunk(); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) memory_iface->MemFree(results); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PDFResourceTest, DidStartLoading) { 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pdf_iface->DidStartLoading(pp_instance()); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceMessageCallParams params; 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC::Message msg; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(sink().GetFirstResourceCallMatching( 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiHostMsg_PDF_DidStartLoading::ID, ¶ms, &msg)); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PDFResourceTest, DidStopLoading) { 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pdf_iface->DidStopLoading(pp_instance()); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceMessageCallParams params; 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC::Message msg; 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(sink().GetFirstResourceCallMatching( 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiHostMsg_PDF_DidStopLoading::ID, ¶ms, &msg)); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PDFResourceTest, SetContentRestriction) { 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int restrictions = 5; 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pdf_iface->SetContentRestriction(pp_instance(), restrictions); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceMessageCallParams params; 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC::Message msg; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(sink().GetFirstResourceCallMatching( 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiHostMsg_PDF_SetContentRestriction::ID, ¶ms, &msg)); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PDFResourceTest, HasUnsupportedFeature) { 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pdf_iface->HasUnsupportedFeature(pp_instance()); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceMessageCallParams params; 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC::Message msg; 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(sink().GetFirstResourceCallMatching( 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiHostMsg_PDF_HasUnsupportedFeature::ID, ¶ms, &msg)); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PDFResourceTest, Print) { 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pdf_iface->Print(pp_instance()); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceMessageCallParams params; 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC::Message msg; 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(sink().GetFirstResourceCallMatching( 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiHostMsg_PDF_Print::ID, ¶ms, &msg)); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PDFResourceTest, SaveAs) { 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pdf_iface->SaveAs(pp_instance()); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceMessageCallParams params; 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC::Message msg; 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(sink().GetFirstResourceCallMatching( 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiHostMsg_PDF_SaveAs::ID, ¶ms, &msg)); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PDFResourceTest, GetResourceImageForScale) { 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HostResource expected_resource; 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_resource.SetHostResource(pp_instance(), 5); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_ImageDataDesc expected_desc = { 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_IMAGEDATAFORMAT_BGRA_PREMUL, 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 5, 10 }, 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 20, 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedHandle serialized_handle(SerializedHandle::SHARED_MEMORY); 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiPluginMsg_PDF_GetResourceImageReply reply_msg(expected_resource, 1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_desc); 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceSyncCallHandler handler( 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &sink(), 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiHostMsg_PDF_GetResourceImage::ID, 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_OK, 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reply_msg); 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) handler.set_serialized_handle(&serialized_handle); 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sink().AddFilter(&handler); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Resource resource = pdf_iface->GetResourceImageForScale(pp_instance(), 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_RESOURCEIMAGE_PDF_BUTTON_FTP, 1.0f); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProxyAutoLock lock; 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PluginResourceTracker* resource_tracker = 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static_cast<PluginResourceTracker*>( 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PluginGlobals::Get()->GetResourceTracker()); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Resource* resource_object = resource_tracker->GetResource(resource); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ImageData* image_data_object = static_cast<ImageData*>(resource_object); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_ImageDataDesc actual_desc = image_data_object->desc(); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(expected_desc.format, actual_desc.format); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(expected_desc.size.width, actual_desc.size.width); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(expected_desc.size.height, actual_desc.size.height); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(expected_desc.stride, actual_desc.stride); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(resource_tracker->PluginResourceForHostResource( 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_resource), resource); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) resource_tracker->ReleaseResource(resource); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove the filter or it will be destroyed before the sink() is destroyed. 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sink().RemoveFilter(&handler); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace proxy 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace ppapi 207