| // 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 <cstring> |
| |
| #include "base/strings/utf_string_conversions.h" |
| #include "ppapi/c/dev/ppb_memory_dev.h" |
| #include "ppapi/c/pp_errors.h" |
| #include "ppapi/c/ppb_image_data.h" |
| #include "ppapi/proxy/pdf_resource.h" |
| #include "ppapi/proxy/ppapi_messages.h" |
| #include "ppapi/proxy/ppapi_proxy_test.h" |
| #include "ppapi/proxy/ppb_image_data_proxy.h" |
| #include "ppapi/proxy/serialized_handle.h" |
| #include "ppapi/shared_impl/proxy_lock.h" |
| #include "ppapi/shared_impl/scoped_pp_var.h" |
| #include "ppapi/shared_impl/var.h" |
| #include "ppapi/thunk/thunk.h" |
| |
| namespace ppapi { |
| namespace proxy { |
| |
| namespace { |
| |
| typedef PluginProxyTest PDFResourceTest; |
| |
| } // namespace |
| |
| TEST_F(PDFResourceTest, GetLocalizedString) { |
| const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); |
| |
| std::string expected_string = "hello"; |
| PpapiPluginMsg_PDF_GetLocalizedStringReply reply_msg(expected_string); |
| ResourceSyncCallHandler handler( |
| &sink(), |
| PpapiHostMsg_PDF_GetLocalizedString::ID, |
| PP_OK, |
| reply_msg); |
| sink().AddFilter(&handler); |
| |
| PP_Var var = pdf_iface->GetLocalizedString( |
| pp_instance(), PP_RESOURCESTRING_PDFGETPASSWORD); |
| |
| { |
| ProxyAutoLock lock; |
| ScopedPPVar release_var(ScopedPPVar::PassRef(), var); |
| StringVar* string_var = StringVar::FromPPVar(var); |
| ASSERT_TRUE(string_var != NULL); |
| std::string actual_string = string_var->value(); |
| |
| ASSERT_EQ(PpapiHostMsg_PDF_GetLocalizedString::ID, |
| handler.last_handled_msg().type()); |
| ASSERT_EQ(expected_string, actual_string); |
| } |
| |
| // Remove the filter or it will be destroyed before the sink() is destroyed. |
| sink().RemoveFilter(&handler); |
| } |
| |
| TEST_F(PDFResourceTest, SearchString) { |
| ProxyAutoLock lock; |
| // Instantiate a resource explicitly so we can specify the locale. |
| scoped_refptr<PDFResource> pdf_resource( |
| new PDFResource(Connection(&sink(), &sink()), pp_instance())); |
| pdf_resource->SetLocaleForTest("en-US"); |
| |
| string16 input; |
| string16 term; |
| UTF8ToUTF16("abcdefabcdef", 12, &input); |
| UTF8ToUTF16("bc", 2, &term); |
| |
| PP_PrivateFindResult* results; |
| int count = 0; |
| pdf_resource->SearchString( |
| reinterpret_cast<const unsigned short*>(input.c_str()), |
| reinterpret_cast<const unsigned short*>(term.c_str()), |
| true, |
| &results, |
| &count); |
| |
| ASSERT_EQ(2, count); |
| ASSERT_EQ(1, results[0].start_index); |
| ASSERT_EQ(2, results[0].length); |
| ASSERT_EQ(7, results[1].start_index); |
| ASSERT_EQ(2, results[1].length); |
| |
| const PPB_Memory_Dev* memory_iface = thunk::GetPPB_Memory_Dev_0_1_Thunk(); |
| memory_iface->MemFree(results); |
| } |
| |
| TEST_F(PDFResourceTest, DidStartLoading) { |
| const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); |
| |
| pdf_iface->DidStartLoading(pp_instance()); |
| |
| ResourceMessageCallParams params; |
| IPC::Message msg; |
| ASSERT_TRUE(sink().GetFirstResourceCallMatching( |
| PpapiHostMsg_PDF_DidStartLoading::ID, ¶ms, &msg)); |
| } |
| |
| TEST_F(PDFResourceTest, DidStopLoading) { |
| const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); |
| |
| pdf_iface->DidStopLoading(pp_instance()); |
| |
| ResourceMessageCallParams params; |
| IPC::Message msg; |
| ASSERT_TRUE(sink().GetFirstResourceCallMatching( |
| PpapiHostMsg_PDF_DidStopLoading::ID, ¶ms, &msg)); |
| } |
| |
| TEST_F(PDFResourceTest, SetContentRestriction) { |
| const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); |
| |
| int restrictions = 5; |
| pdf_iface->SetContentRestriction(pp_instance(), restrictions); |
| |
| ResourceMessageCallParams params; |
| IPC::Message msg; |
| ASSERT_TRUE(sink().GetFirstResourceCallMatching( |
| PpapiHostMsg_PDF_SetContentRestriction::ID, ¶ms, &msg)); |
| } |
| |
| TEST_F(PDFResourceTest, HasUnsupportedFeature) { |
| const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); |
| |
| pdf_iface->HasUnsupportedFeature(pp_instance()); |
| |
| ResourceMessageCallParams params; |
| IPC::Message msg; |
| ASSERT_TRUE(sink().GetFirstResourceCallMatching( |
| PpapiHostMsg_PDF_HasUnsupportedFeature::ID, ¶ms, &msg)); |
| } |
| |
| TEST_F(PDFResourceTest, Print) { |
| const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); |
| |
| pdf_iface->Print(pp_instance()); |
| |
| ResourceMessageCallParams params; |
| IPC::Message msg; |
| ASSERT_TRUE(sink().GetFirstResourceCallMatching( |
| PpapiHostMsg_PDF_Print::ID, ¶ms, &msg)); |
| } |
| |
| TEST_F(PDFResourceTest, SaveAs) { |
| const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); |
| |
| pdf_iface->SaveAs(pp_instance()); |
| |
| ResourceMessageCallParams params; |
| IPC::Message msg; |
| ASSERT_TRUE(sink().GetFirstResourceCallMatching( |
| PpapiHostMsg_PDF_SaveAs::ID, ¶ms, &msg)); |
| } |
| |
| TEST_F(PDFResourceTest, GetResourceImageForScale) { |
| const PPB_PDF* pdf_iface = thunk::GetPPB_PDF_Thunk(); |
| |
| HostResource expected_resource; |
| expected_resource.SetHostResource(pp_instance(), 5); |
| PP_ImageDataDesc expected_desc = { |
| PP_IMAGEDATAFORMAT_BGRA_PREMUL, |
| { 5, 10 }, |
| 20, |
| }; |
| SerializedHandle serialized_handle(SerializedHandle::SHARED_MEMORY); |
| PpapiPluginMsg_PDF_GetResourceImageReply reply_msg(expected_resource, |
| expected_desc); |
| ResourceSyncCallHandler handler( |
| &sink(), |
| PpapiHostMsg_PDF_GetResourceImage::ID, |
| PP_OK, |
| reply_msg); |
| handler.set_serialized_handle(&serialized_handle); |
| sink().AddFilter(&handler); |
| |
| PP_Resource resource = pdf_iface->GetResourceImageForScale(pp_instance(), |
| PP_RESOURCEIMAGE_PDF_BUTTON_FTP, 1.0f); |
| { |
| ProxyAutoLock lock; |
| PluginResourceTracker* resource_tracker = |
| static_cast<PluginResourceTracker*>( |
| PluginGlobals::Get()->GetResourceTracker()); |
| Resource* resource_object = resource_tracker->GetResource(resource); |
| ImageData* image_data_object = static_cast<ImageData*>(resource_object); |
| PP_ImageDataDesc actual_desc = image_data_object->desc(); |
| ASSERT_EQ(expected_desc.format, actual_desc.format); |
| ASSERT_EQ(expected_desc.size.width, actual_desc.size.width); |
| ASSERT_EQ(expected_desc.size.height, actual_desc.size.height); |
| ASSERT_EQ(expected_desc.stride, actual_desc.stride); |
| |
| ASSERT_EQ(resource_tracker->PluginResourceForHostResource( |
| expected_resource), resource); |
| |
| resource_tracker->ReleaseResource(resource); |
| } |
| |
| // Remove the filter or it will be destroyed before the sink() is destroyed. |
| sink().RemoveFilter(&handler); |
| } |
| |
| } // namespace proxy |
| } // namespace ppapi |