| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/message_loop.h" | 5 #include "base/message_loop.h" |
| 6 #include "ppapi/c/dev/ppb_file_chooser_dev.h" | 6 #include "ppapi/c/dev/ppb_file_chooser_dev.h" |
| 7 #include "ppapi/c/pp_errors.h" | 7 #include "ppapi/c/pp_errors.h" |
| 8 #include "ppapi/proxy/file_chooser_resource.h" | 8 #include "ppapi/proxy/file_chooser_resource.h" |
| 9 #include "ppapi/proxy/locking_resource_releaser.h" | |
| 10 #include "ppapi/proxy/ppapi_messages.h" | 9 #include "ppapi/proxy/ppapi_messages.h" |
| 11 #include "ppapi/proxy/ppapi_proxy_test.h" | 10 #include "ppapi/proxy/ppapi_proxy_test.h" |
| 12 #include "ppapi/shared_impl/proxy_lock.h" | 11 #include "ppapi/shared_impl/proxy_lock.h" |
| 12 #include "ppapi/shared_impl/scoped_pp_resource.h" |
| 13 #include "ppapi/shared_impl/scoped_pp_var.h" | 13 #include "ppapi/shared_impl/scoped_pp_var.h" |
| 14 #include "ppapi/shared_impl/var.h" | 14 #include "ppapi/shared_impl/var.h" |
| 15 #include "ppapi/thunk/thunk.h" | 15 #include "ppapi/thunk/thunk.h" |
| 16 | 16 |
| 17 namespace ppapi { | 17 namespace ppapi { |
| 18 namespace proxy { | 18 namespace proxy { |
| 19 | 19 |
| 20 namespace { | 20 namespace { |
| 21 | 21 |
| 22 typedef PluginProxyTest FileChooserResourceTest; | 22 typedef PluginProxyTest FileChooserResourceTest; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 return output.size() == kCount; | 60 return output.size() == kCount; |
| 61 } | 61 } |
| 62 | 62 |
| 63 } // namespace | 63 } // namespace |
| 64 | 64 |
| 65 // Does a full test of Show() and reply functionality in the plugin side using | 65 // Does a full test of Show() and reply functionality in the plugin side using |
| 66 // the public C interfaces. | 66 // the public C interfaces. |
| 67 TEST_F(FileChooserResourceTest, Show) { | 67 TEST_F(FileChooserResourceTest, Show) { |
| 68 const PPB_FileChooser_Dev_0_6* chooser_iface = | 68 const PPB_FileChooser_Dev_0_6* chooser_iface = |
| 69 thunk::GetPPB_FileChooser_Dev_0_6_Thunk(); | 69 thunk::GetPPB_FileChooser_Dev_0_6_Thunk(); |
| 70 LockingResourceReleaser res( | 70 ScopedPPResource res(ScopedPPResource::PassRef(), |
| 71 chooser_iface->Create(pp_instance(), PP_FILECHOOSERMODE_OPEN, | 71 chooser_iface->Create(pp_instance(), PP_FILECHOOSERMODE_OPEN, |
| 72 PP_MakeUndefined())); | 72 PP_MakeUndefined())); |
| 73 | 73 |
| 74 std::vector<PP_Resource> dest; | 74 std::vector<PP_Resource> dest; |
| 75 PP_ArrayOutput output; | 75 PP_ArrayOutput output; |
| 76 output.GetDataBuffer = &GetFileRefDataBuffer; | 76 output.GetDataBuffer = &GetFileRefDataBuffer; |
| 77 output.user_data = &dest; | 77 output.user_data = &dest; |
| 78 | 78 |
| 79 int32_t result = chooser_iface->Show( | 79 int32_t result = chooser_iface->Show( |
| 80 res.get(), output, PP_MakeCompletionCallback(&DoNothingCallback, NULL)); | 80 res, output, PP_MakeCompletionCallback(&DoNothingCallback, NULL)); |
| 81 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 81 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
| 82 | 82 |
| 83 // Should have sent a "show" message. | 83 // Should have sent a "show" message. |
| 84 ResourceMessageCallParams params; | 84 ResourceMessageCallParams params; |
| 85 IPC::Message msg; | 85 IPC::Message msg; |
| 86 ASSERT_TRUE(sink().GetFirstResourceCallMatching( | 86 ASSERT_TRUE(sink().GetFirstResourceCallMatching( |
| 87 PpapiHostMsg_FileChooser_Show::ID, ¶ms, &msg)); | 87 PpapiHostMsg_FileChooser_Show::ID, ¶ms, &msg)); |
| 88 | 88 |
| 89 ResourceMessageReplyParams reply_params(params.pp_resource(), | 89 ResourceMessageReplyParams reply_params(params.pp_resource(), |
| 90 params.sequence()); | 90 params.sequence()); |
| 91 reply_params.set_result(PP_OK); | 91 reply_params.set_result(PP_OK); |
| 92 | 92 |
| 93 // Synthesize a response with one file ref in it. Note that it must have a | 93 // Synthesize a response with one file ref in it. Note that it must have a |
| 94 // host resource value set or deserialization will fail. Since there isn't | 94 // host resource value set or deserialization will fail. Since there isn't |
| 95 // actually a host, this can be whatever we want. | 95 // actually a host, this can be whatever we want. |
| 96 std::vector<PPB_FileRef_CreateInfo> create_info_array; | 96 std::vector<PPB_FileRef_CreateInfo> create_info_array; |
| 97 PPB_FileRef_CreateInfo create_info; | 97 PPB_FileRef_CreateInfo create_info; |
| 98 create_info.resource.SetHostResource(pp_instance(), 123); | 98 create_info.resource.SetHostResource(pp_instance(), 123); |
| 99 create_info.path = "foo/bar"; | 99 create_info.path = "foo/bar"; |
| 100 create_info.name = "baz"; | 100 create_info.name = "baz"; |
| 101 create_info_array.push_back(create_info); | 101 create_info_array.push_back(create_info); |
| 102 ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived( | 102 ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived( |
| 103 PpapiPluginMsg_ResourceReply(reply_params, | 103 PpapiPluginMsg_ResourceReply(reply_params, |
| 104 PpapiPluginMsg_FileChooser_ShowReply(create_info_array)))); | 104 PpapiPluginMsg_FileChooser_ShowReply(create_info_array)))); |
| 105 | 105 |
| 106 // Should have populated our vector. | 106 // Should have populated our vector. |
| 107 ASSERT_EQ(1u, dest.size()); | 107 ASSERT_EQ(1u, dest.size()); |
| 108 LockingResourceReleaser dest_deletor(dest[0]); // Ensure it's cleaned up. | 108 ScopedPPResource dest_deletor(dest[0]); // Ensure it's cleaned up. |
| 109 | 109 |
| 110 const PPB_FileRef_1_0* file_ref_iface = thunk::GetPPB_FileRef_1_0_Thunk(); | 110 const PPB_FileRef_1_0* file_ref_iface = thunk::GetPPB_FileRef_1_0_Thunk(); |
| 111 EXPECT_EQ(PP_FILESYSTEMTYPE_EXTERNAL, | 111 EXPECT_EQ(PP_FILESYSTEMTYPE_EXTERNAL, |
| 112 file_ref_iface->GetFileSystemType(dest[0])); | 112 file_ref_iface->GetFileSystemType(dest[0])); |
| 113 | 113 |
| 114 PP_Var name_var(file_ref_iface->GetName(dest[0])); | 114 PP_Var name_var(file_ref_iface->GetName(dest[0])); |
| 115 { | 115 { |
| 116 ProxyAutoLock lock; | 116 ProxyAutoLock lock; |
| 117 ScopedPPVar release_name_var(ScopedPPVar::PassRef(), name_var); | 117 ScopedPPVar release_name_var(ScopedPPVar::PassRef(), name_var); |
| 118 EXPECT_VAR_IS_STRING(create_info.name, name_var); | 118 EXPECT_VAR_IS_STRING(create_info.name, name_var); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 137 EXPECT_TRUE(CheckParseAcceptType(" app/txt , app/pdf ", | 137 EXPECT_TRUE(CheckParseAcceptType(" app/txt , app/pdf ", |
| 138 "app/txt", "app/pdf")); | 138 "app/txt", "app/pdf")); |
| 139 | 139 |
| 140 // No dot or slash ones should be skipped. | 140 // No dot or slash ones should be skipped. |
| 141 EXPECT_TRUE(CheckParseAcceptType("foo", NULL, NULL)); | 141 EXPECT_TRUE(CheckParseAcceptType("foo", NULL, NULL)); |
| 142 EXPECT_TRUE(CheckParseAcceptType("foo,.txt", ".txt", NULL)); | 142 EXPECT_TRUE(CheckParseAcceptType("foo,.txt", ".txt", NULL)); |
| 143 } | 143 } |
| 144 | 144 |
| 145 } // namespace proxy | 145 } // namespace proxy |
| 146 } // namespace ppapi | 146 } // namespace ppapi |
| OLD | NEW |