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.
7 #include "base/strings/utf_string_conversions.h"
8 #include "ppapi/c/dev/ppb_memory_dev.h"
9 #include "ppapi/c/pp_errors.h"
10 #include "ppapi/c/ppb_image_data.h"
11 #include "ppapi/proxy/pdf_resource.h"
12 #include "ppapi/proxy/ppapi_messages.h"
13 #include "ppapi/proxy/ppapi_proxy_test.h"
14 #include "ppapi/proxy/ppb_image_data_proxy.h"
15 #include "ppapi/proxy/serialized_handle.h"
16 #include "ppapi/shared_impl/proxy_lock.h"
17 #include "ppapi/shared_impl/scoped_pp_var.h"
18 #include "ppapi/shared_impl/var.h"
19 #include "ppapi/thunk/thunk.h"
26 typedef PluginProxyTest PDFResourceTest
;
30 TEST_F(PDFResourceTest
, GetLocalizedString
) {
31 const PPB_PDF
* pdf_iface
= thunk::GetPPB_PDF_Thunk();
33 std::string expected_string
= "hello";
34 PpapiPluginMsg_PDF_GetLocalizedStringReply
reply_msg(expected_string
);
35 ResourceSyncCallHandler
handler(
37 PpapiHostMsg_PDF_GetLocalizedString::ID
,
40 sink().AddFilter(&handler
);
42 PP_Var var
= pdf_iface
->GetLocalizedString(
43 pp_instance(), PP_RESOURCESTRING_PDFGETPASSWORD
);
47 ScopedPPVar
release_var(ScopedPPVar::PassRef(), var
);
48 StringVar
* string_var
= StringVar::FromPPVar(var
);
49 ASSERT_TRUE(string_var
!= NULL
);
50 std::string actual_string
= string_var
->value();
52 ASSERT_EQ(PpapiHostMsg_PDF_GetLocalizedString::ID
,
53 handler
.last_handled_msg().type());
54 ASSERT_EQ(expected_string
, actual_string
);
57 // Remove the filter or it will be destroyed before the sink() is destroyed.
58 sink().RemoveFilter(&handler
);
61 TEST_F(PDFResourceTest
, SearchString
) {
63 // Instantiate a resource explicitly so we can specify the locale.
64 scoped_refptr
<PDFResource
> pdf_resource(
65 new PDFResource(Connection(&sink(), &sink()), pp_instance()));
66 pdf_resource
->SetLocaleForTest("en-US");
70 UTF8ToUTF16("abcdefabcdef", 12, &input
);
71 UTF8ToUTF16("bc", 2, &term
);
73 PP_PrivateFindResult
* results
;
75 pdf_resource
->SearchString(
76 reinterpret_cast<const unsigned short*>(input
.c_str()),
77 reinterpret_cast<const unsigned short*>(term
.c_str()),
83 ASSERT_EQ(1, results
[0].start_index
);
84 ASSERT_EQ(2, results
[0].length
);
85 ASSERT_EQ(7, results
[1].start_index
);
86 ASSERT_EQ(2, results
[1].length
);
88 const PPB_Memory_Dev
* memory_iface
= thunk::GetPPB_Memory_Dev_0_1_Thunk();
89 memory_iface
->MemFree(results
);
92 TEST_F(PDFResourceTest
, DidStartLoading
) {
93 const PPB_PDF
* pdf_iface
= thunk::GetPPB_PDF_Thunk();
95 pdf_iface
->DidStartLoading(pp_instance());
97 ResourceMessageCallParams params
;
99 ASSERT_TRUE(sink().GetFirstResourceCallMatching(
100 PpapiHostMsg_PDF_DidStartLoading::ID
, ¶ms
, &msg
));
103 TEST_F(PDFResourceTest
, DidStopLoading
) {
104 const PPB_PDF
* pdf_iface
= thunk::GetPPB_PDF_Thunk();
106 pdf_iface
->DidStopLoading(pp_instance());
108 ResourceMessageCallParams params
;
110 ASSERT_TRUE(sink().GetFirstResourceCallMatching(
111 PpapiHostMsg_PDF_DidStopLoading::ID
, ¶ms
, &msg
));
114 TEST_F(PDFResourceTest
, SetContentRestriction
) {
115 const PPB_PDF
* pdf_iface
= thunk::GetPPB_PDF_Thunk();
117 int restrictions
= 5;
118 pdf_iface
->SetContentRestriction(pp_instance(), restrictions
);
120 ResourceMessageCallParams params
;
122 ASSERT_TRUE(sink().GetFirstResourceCallMatching(
123 PpapiHostMsg_PDF_SetContentRestriction::ID
, ¶ms
, &msg
));
126 TEST_F(PDFResourceTest
, HasUnsupportedFeature
) {
127 const PPB_PDF
* pdf_iface
= thunk::GetPPB_PDF_Thunk();
129 pdf_iface
->HasUnsupportedFeature(pp_instance());
131 ResourceMessageCallParams params
;
133 ASSERT_TRUE(sink().GetFirstResourceCallMatching(
134 PpapiHostMsg_PDF_HasUnsupportedFeature::ID
, ¶ms
, &msg
));
137 TEST_F(PDFResourceTest
, Print
) {
138 const PPB_PDF
* pdf_iface
= thunk::GetPPB_PDF_Thunk();
140 pdf_iface
->Print(pp_instance());
142 ResourceMessageCallParams params
;
144 ASSERT_TRUE(sink().GetFirstResourceCallMatching(
145 PpapiHostMsg_PDF_Print::ID
, ¶ms
, &msg
));
148 TEST_F(PDFResourceTest
, SaveAs
) {
149 const PPB_PDF
* pdf_iface
= thunk::GetPPB_PDF_Thunk();
151 pdf_iface
->SaveAs(pp_instance());
153 ResourceMessageCallParams params
;
155 ASSERT_TRUE(sink().GetFirstResourceCallMatching(
156 PpapiHostMsg_PDF_SaveAs::ID
, ¶ms
, &msg
));
159 TEST_F(PDFResourceTest
, GetResourceImageForScale
) {
160 const PPB_PDF
* pdf_iface
= thunk::GetPPB_PDF_Thunk();
162 HostResource expected_resource
;
163 expected_resource
.SetHostResource(pp_instance(), 5);
164 PP_ImageDataDesc expected_desc
= {
165 PP_IMAGEDATAFORMAT_BGRA_PREMUL
,
169 SerializedHandle
serialized_handle(SerializedHandle::SHARED_MEMORY
);
170 PpapiPluginMsg_PDF_GetResourceImageReply
reply_msg(expected_resource
,
172 ResourceSyncCallHandler
handler(
174 PpapiHostMsg_PDF_GetResourceImage::ID
,
177 handler
.set_serialized_handle(&serialized_handle
);
178 sink().AddFilter(&handler
);
180 PP_Resource resource
= pdf_iface
->GetResourceImageForScale(pp_instance(),
181 PP_RESOURCEIMAGE_PDF_BUTTON_FTP
, 1.0f
);
184 PluginResourceTracker
* resource_tracker
=
185 static_cast<PluginResourceTracker
*>(
186 PluginGlobals::Get()->GetResourceTracker());
187 Resource
* resource_object
= resource_tracker
->GetResource(resource
);
188 ImageData
* image_data_object
= static_cast<ImageData
*>(resource_object
);
189 PP_ImageDataDesc actual_desc
= image_data_object
->desc();
190 ASSERT_EQ(expected_desc
.format
, actual_desc
.format
);
191 ASSERT_EQ(expected_desc
.size
.width
, actual_desc
.size
.width
);
192 ASSERT_EQ(expected_desc
.size
.height
, actual_desc
.size
.height
);
193 ASSERT_EQ(expected_desc
.stride
, actual_desc
.stride
);
195 ASSERT_EQ(resource_tracker
->PluginResourceForHostResource(
196 expected_resource
), resource
);
198 resource_tracker
->ReleaseResource(resource
);
201 // Remove the filter or it will be destroyed before the sink() is destroyed.
202 sink().RemoveFilter(&handler
);