Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: ppapi/proxy/file_chooser_resource.cc

Issue 10815073: Refactoring of new IPC-only pepper implementation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/proxy/file_chooser_resource.h ('k') | ppapi/proxy/plugin_dispatcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "ppapi/proxy/file_chooser_resource.h" 5 #include "ppapi/proxy/file_chooser_resource.h"
6 6
7 #include "base/string_split.h" 7 #include "base/string_split.h"
8 #include "ipc/ipc_message.h" 8 #include "ipc/ipc_message.h"
9 #include "ppapi/c/pp_errors.h" 9 #include "ppapi/c/pp_errors.h"
10 #include "ppapi/proxy/dispatch_reply_message.h"
10 #include "ppapi/proxy/ppapi_messages.h" 11 #include "ppapi/proxy/ppapi_messages.h"
11 #include "ppapi/proxy/ppb_file_ref_proxy.h" 12 #include "ppapi/proxy/ppb_file_ref_proxy.h"
12 #include "ppapi/shared_impl/var.h" 13 #include "ppapi/shared_impl/var.h"
13 14
14 namespace ppapi { 15 namespace ppapi {
15 namespace proxy { 16 namespace proxy {
16 17
17 FileChooserResource::FileChooserResource(IPC::Sender* sender, 18 FileChooserResource::FileChooserResource(Connection connection,
18 PP_Instance instance, 19 PP_Instance instance,
19 PP_FileChooserMode_Dev mode, 20 PP_FileChooserMode_Dev mode,
20 const std::string& accept_types) 21 const std::string& accept_types)
21 : PluginResource(sender, instance), 22 : PluginResource(connection, instance),
22 mode_(mode) { 23 mode_(mode) {
23 PopulateAcceptTypes(accept_types, &accept_types_); 24 PopulateAcceptTypes(accept_types, &accept_types_);
24 } 25 }
25 26
26 FileChooserResource::~FileChooserResource() { 27 FileChooserResource::~FileChooserResource() {
27 } 28 }
28 29
29 thunk::PPB_FileChooser_API* FileChooserResource::AsPPB_FileChooser_API() { 30 thunk::PPB_FileChooser_API* FileChooserResource::AsPPB_FileChooser_API() {
30 return this; 31 return this;
31 } 32 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 // type it would just be a "/". 90 // type it would just be a "/".
90 if (type.length() < 2) 91 if (type.length() < 2)
91 continue; 92 continue;
92 if (type.find_first_of('/') == std::string::npos && type[0] != '.') 93 if (type.find_first_of('/') == std::string::npos && type[0] != '.')
93 continue; 94 continue;
94 StringToLowerASCII(&type); 95 StringToLowerASCII(&type);
95 output->push_back(type); 96 output->push_back(type);
96 } 97 }
97 } 98 }
98 99
99 void FileChooserResource::OnReplyReceived(int /* sequence */, 100 void FileChooserResource::OnReplyReceived(
100 int32_t result, 101 const ResourceMessageReplyParams& params,
101 const IPC::Message& msg) { 102 const IPC::Message& msg) {
102 PpapiPluginMsg_FileChooser_ShowReply::Schema::Param param; 103 IPC_BEGIN_MESSAGE_MAP(FileChooserResource, msg)
103 PpapiPluginMsg_FileChooser_ShowReply::Read(&msg, &param); 104 PPAPI_DISPATCH_RESOURCE_REPLY(PpapiPluginMsg_FileChooser_ShowReply,
104 const std::vector<ppapi::PPB_FileRef_CreateInfo>& chosen_files = param.a; 105 OnPluginMsgShowReply)
106 IPC_END_MESSAGE_MAP()
107 }
105 108
109 void FileChooserResource::OnPluginMsgShowReply(
110 const ResourceMessageReplyParams& params,
111 const std::vector<PPB_FileRef_CreateInfo>& chosen_files) {
106 if (output_.is_valid()) { 112 if (output_.is_valid()) {
107 // Using v0.6 of the API with the output array. 113 // Using v0.6 of the API with the output array.
108 std::vector<PP_Resource> files; 114 std::vector<PP_Resource> files;
109 for (size_t i = 0; i < chosen_files.size(); i++) 115 for (size_t i = 0; i < chosen_files.size(); i++)
110 files.push_back(PPB_FileRef_Proxy::DeserializeFileRef(chosen_files[i])); 116 files.push_back(PPB_FileRef_Proxy::DeserializeFileRef(chosen_files[i]));
111 output_.StoreResourceVector(files); 117 output_.StoreResourceVector(files);
112 } else { 118 } else {
113 // Convert each of the passed in file infos to resources. These will be 119 // Convert each of the passed in file infos to resources. These will be
114 // owned by the FileChooser object until they're passed to the plugin. 120 // owned by the FileChooser object until they're passed to the plugin.
115 DCHECK(file_queue_.empty()); 121 DCHECK(file_queue_.empty());
116 for (size_t i = 0; i < chosen_files.size(); i++) { 122 for (size_t i = 0; i < chosen_files.size(); i++) {
117 file_queue_.push(PPB_FileRef_Proxy::DeserializeFileRef( 123 file_queue_.push(PPB_FileRef_Proxy::DeserializeFileRef(
118 chosen_files[i])); 124 chosen_files[i]));
119 } 125 }
120 } 126 }
121 127
122 // Notify the plugin of the new data. 128 // Notify the plugin of the new data.
123 TrackedCallback::ClearAndRun(&callback_, result); 129 TrackedCallback::ClearAndRun(&callback_, params.result());
124 // DANGER: May delete |this|! 130 // DANGER: May delete |this|!
125 } 131 }
126 132
127 int32_t FileChooserResource::ShowInternal( 133 int32_t FileChooserResource::ShowInternal(
128 PP_Bool save_as, 134 PP_Bool save_as,
129 const PP_Var& suggested_file_name, 135 const PP_Var& suggested_file_name,
130 scoped_refptr<TrackedCallback> callback) { 136 scoped_refptr<TrackedCallback> callback) {
131 if (TrackedCallback::IsPending(callback_)) 137 if (TrackedCallback::IsPending(callback_))
132 return PP_ERROR_INPROGRESS; 138 return PP_ERROR_INPROGRESS;
133 139
134 if (!sent_create_to_renderer()) 140 if (!sent_create_to_renderer())
135 SendCreateToRenderer(PpapiHostMsg_FileChooser_Create()); 141 SendCreateToRenderer(PpapiHostMsg_FileChooser_Create());
136 142
137 callback_ = callback; 143 callback_ = callback;
138 StringVar* sugg_str = StringVar::FromPPVar(suggested_file_name); 144 StringVar* sugg_str = StringVar::FromPPVar(suggested_file_name);
139 145
140 CallRenderer(PpapiHostMsg_FileChooser_Show( 146 CallRenderer(PpapiHostMsg_FileChooser_Show(
141 PP_ToBool(save_as), 147 PP_ToBool(save_as),
142 mode_ == PP_FILECHOOSERMODE_OPENMULTIPLE, 148 mode_ == PP_FILECHOOSERMODE_OPENMULTIPLE,
143 sugg_str ? sugg_str->value() : std::string(), 149 sugg_str ? sugg_str->value() : std::string(),
144 accept_types_)); 150 accept_types_));
145 return PP_OK_COMPLETIONPENDING; 151 return PP_OK_COMPLETIONPENDING;
146 } 152 }
147 153
148 } // namespace proxy 154 } // namespace proxy
149 } // namespace ppapi 155 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/proxy/file_chooser_resource.h ('k') | ppapi/proxy/plugin_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698