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/message_loop.h" | 5 #include "base/message_loop/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/c/ppb_file_ref.h" | |
8 #include "ppapi/proxy/file_chooser_resource.h" | 9 #include "ppapi/proxy/file_chooser_resource.h" |
9 #include "ppapi/proxy/locking_resource_releaser.h" | 10 #include "ppapi/proxy/locking_resource_releaser.h" |
10 #include "ppapi/proxy/ppapi_messages.h" | 11 #include "ppapi/proxy/ppapi_messages.h" |
11 #include "ppapi/proxy/ppapi_proxy_test.h" | 12 #include "ppapi/proxy/ppapi_proxy_test.h" |
12 #include "ppapi/shared_impl/proxy_lock.h" | 13 #include "ppapi/shared_impl/proxy_lock.h" |
13 #include "ppapi/shared_impl/scoped_pp_var.h" | 14 #include "ppapi/shared_impl/scoped_pp_var.h" |
14 #include "ppapi/shared_impl/var.h" | 15 #include "ppapi/shared_impl/var.h" |
15 #include "ppapi/thunk/thunk.h" | 16 #include "ppapi/thunk/thunk.h" |
16 | 17 |
17 namespace ppapi { | 18 namespace ppapi { |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
86 ASSERT_TRUE(sink().GetFirstResourceCallMatching( | 87 ASSERT_TRUE(sink().GetFirstResourceCallMatching( |
87 PpapiHostMsg_FileChooser_Show::ID, ¶ms, &msg)); | 88 PpapiHostMsg_FileChooser_Show::ID, ¶ms, &msg)); |
88 | 89 |
89 ResourceMessageReplyParams reply_params(params.pp_resource(), | 90 ResourceMessageReplyParams reply_params(params.pp_resource(), |
90 params.sequence()); | 91 params.sequence()); |
91 reply_params.set_result(PP_OK); | 92 reply_params.set_result(PP_OK); |
92 | 93 |
93 // Synthesize a response with one file ref in it. Note that it must have a | 94 // 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 | 95 // host resource value set or deserialization will fail. Since there isn't |
95 // actually a host, this can be whatever we want. | 96 // actually a host, this can be whatever we want. |
96 std::vector<PPB_FileRef_CreateInfo> create_info_array; | 97 std::vector<FileRef_CreateInfo> create_info_array; |
97 PPB_FileRef_CreateInfo create_info; | 98 FileRef_CreateInfo create_info; |
98 create_info.resource.SetHostResource(pp_instance(), 123); | 99 // In practice, we would be dealing with files on an external filesystem, but |
99 create_info.path = "foo/bar"; | 100 // plugins aren't allowed to create resources there, so we use LOCALTEMPORARY |
100 create_info.name = "baz"; | 101 // here instead. |
102 create_info.file_system_type = PP_FILESYSTEMTYPE_LOCALTEMPORARY; | |
dmichael (off chromium)
2013/08/07 22:19:13
I'm not sure I understand why you need to do this.
teravest
2013/08/08 00:50:06
The problem is that an external FileRef always nee
dmichael (off chromium)
2013/08/08 21:24:03
Hmm. It feels quite weird to unit test a file type
| |
103 create_info.internal_path = "/foo/bar"; | |
101 create_info_array.push_back(create_info); | 104 create_info_array.push_back(create_info); |
102 ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived( | 105 ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived( |
103 PpapiPluginMsg_ResourceReply(reply_params, | 106 PpapiPluginMsg_ResourceReply(reply_params, |
104 PpapiPluginMsg_FileChooser_ShowReply(create_info_array)))); | 107 PpapiPluginMsg_FileChooser_ShowReply(create_info_array)))); |
105 | 108 |
106 // Should have populated our vector. | 109 // Should have populated our vector. |
107 ASSERT_EQ(1u, dest.size()); | 110 ASSERT_EQ(1u, dest.size()); |
108 LockingResourceReleaser dest_deletor(dest[0]); // Ensure it's cleaned up. | 111 LockingResourceReleaser dest_deletor(dest[0]); // Ensure it's cleaned up. |
109 | 112 |
110 const PPB_FileRef_1_0* file_ref_iface = thunk::GetPPB_FileRef_1_0_Thunk(); | 113 const PPB_FileRef_1_0* file_ref_iface = thunk::GetPPB_FileRef_1_0_Thunk(); |
111 EXPECT_EQ(PP_FILESYSTEMTYPE_EXTERNAL, | 114 EXPECT_EQ(PP_FILESYSTEMTYPE_LOCALTEMPORARY, |
112 file_ref_iface->GetFileSystemType(dest[0])); | 115 file_ref_iface->GetFileSystemType(dest[0])); |
113 | 116 |
114 PP_Var name_var(file_ref_iface->GetName(dest[0])); | 117 PP_Var name_var(file_ref_iface->GetName(dest[0])); |
115 { | 118 { |
116 ProxyAutoLock lock; | 119 ProxyAutoLock lock; |
117 ScopedPPVar release_name_var(ScopedPPVar::PassRef(), name_var); | 120 ScopedPPVar release_name_var(ScopedPPVar::PassRef(), name_var); |
118 EXPECT_VAR_IS_STRING(create_info.name, name_var); | 121 EXPECT_VAR_IS_STRING("bar", name_var); |
119 } | 122 } |
120 // Path should be undefined since it's external filesystem. | |
121 PP_Var path_var(file_ref_iface->GetPath(dest[0])); | 123 PP_Var path_var(file_ref_iface->GetPath(dest[0])); |
122 { | 124 { |
123 ProxyAutoLock lock; | 125 ProxyAutoLock lock; |
124 ScopedPPVar release_path_var(ScopedPPVar::PassRef(), path_var); | 126 ScopedPPVar release_path_var(ScopedPPVar::PassRef(), path_var); |
125 EXPECT_EQ(PP_VARTYPE_UNDEFINED, path_var.type); | 127 EXPECT_VAR_IS_STRING(create_info.internal_path, path_var); |
126 } | 128 } |
127 } | 129 } |
128 | 130 |
129 TEST_F(FileChooserResourceTest, PopulateAcceptTypes) { | 131 TEST_F(FileChooserResourceTest, PopulateAcceptTypes) { |
130 EXPECT_TRUE(CheckParseAcceptType(std::string(), NULL, NULL)); | 132 EXPECT_TRUE(CheckParseAcceptType(std::string(), NULL, NULL)); |
131 EXPECT_TRUE(CheckParseAcceptType("/", NULL, NULL)); | 133 EXPECT_TRUE(CheckParseAcceptType("/", NULL, NULL)); |
132 EXPECT_TRUE(CheckParseAcceptType(".", NULL, NULL)); | 134 EXPECT_TRUE(CheckParseAcceptType(".", NULL, NULL)); |
133 EXPECT_TRUE(CheckParseAcceptType(",, , ", NULL, NULL)); | 135 EXPECT_TRUE(CheckParseAcceptType(",, , ", NULL, NULL)); |
134 | 136 |
135 EXPECT_TRUE(CheckParseAcceptType("app/txt", "app/txt", NULL)); | 137 EXPECT_TRUE(CheckParseAcceptType("app/txt", "app/txt", NULL)); |
136 EXPECT_TRUE(CheckParseAcceptType("app/txt,app/pdf", "app/txt", "app/pdf")); | 138 EXPECT_TRUE(CheckParseAcceptType("app/txt,app/pdf", "app/txt", "app/pdf")); |
137 EXPECT_TRUE(CheckParseAcceptType(" app/txt , app/pdf ", | 139 EXPECT_TRUE(CheckParseAcceptType(" app/txt , app/pdf ", |
138 "app/txt", "app/pdf")); | 140 "app/txt", "app/pdf")); |
139 | 141 |
140 // No dot or slash ones should be skipped. | 142 // No dot or slash ones should be skipped. |
141 EXPECT_TRUE(CheckParseAcceptType("foo", NULL, NULL)); | 143 EXPECT_TRUE(CheckParseAcceptType("foo", NULL, NULL)); |
142 EXPECT_TRUE(CheckParseAcceptType("foo,.txt", ".txt", NULL)); | 144 EXPECT_TRUE(CheckParseAcceptType("foo,.txt", ".txt", NULL)); |
143 } | 145 } |
144 | 146 |
145 } // namespace proxy | 147 } // namespace proxy |
146 } // namespace ppapi | 148 } // namespace ppapi |
OLD | NEW |