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

Side by Side Diff: webkit/plugins/ppapi/ppb_file_io_impl.cc

Issue 7669055: Remove webkit::ppapi::Resource. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix self-assignment Created 9 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "webkit/plugins/ppapi/ppb_file_io_impl.h" 5 #include "webkit/plugins/ppapi/ppb_file_io_impl.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/file_util_proxy.h" 9 #include "base/file_util_proxy.h"
10 #include "base/message_loop_proxy.h" 10 #include "base/message_loop_proxy.h"
11 #include "base/platform_file.h" 11 #include "base/platform_file.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/time.h" 13 #include "base/time.h"
14 #include "ppapi/c/ppb_file_io.h" 14 #include "ppapi/c/ppb_file_io.h"
15 #include "ppapi/c/trusted/ppb_file_io_trusted.h" 15 #include "ppapi/c/trusted/ppb_file_io_trusted.h"
16 #include "ppapi/c/pp_completion_callback.h" 16 #include "ppapi/c/pp_completion_callback.h"
17 #include "ppapi/c/pp_errors.h" 17 #include "ppapi/c/pp_errors.h"
18 #include "ppapi/shared_impl/time_conversion.h" 18 #include "ppapi/shared_impl/time_conversion.h"
19 #include "ppapi/thunk/enter.h" 19 #include "ppapi/thunk/enter.h"
20 #include "ppapi/thunk/ppb_file_ref_api.h" 20 #include "ppapi/thunk/ppb_file_ref_api.h"
21 #include "webkit/plugins/ppapi/common.h" 21 #include "webkit/plugins/ppapi/common.h"
22 #include "webkit/plugins/ppapi/file_type_conversions.h" 22 #include "webkit/plugins/ppapi/file_type_conversions.h"
23 #include "webkit/plugins/ppapi/plugin_module.h" 23 #include "webkit/plugins/ppapi/plugin_module.h"
24 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" 24 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
25 #include "webkit/plugins/ppapi/ppb_file_ref_impl.h" 25 #include "webkit/plugins/ppapi/ppb_file_ref_impl.h"
26 #include "webkit/plugins/ppapi/quota_file_io.h" 26 #include "webkit/plugins/ppapi/quota_file_io.h"
27 #include "webkit/plugins/ppapi/resource_helper.h"
27 #include "webkit/plugins/ppapi/resource_tracker.h" 28 #include "webkit/plugins/ppapi/resource_tracker.h"
28 29
29 using ppapi::PPTimeToTime; 30 using ppapi::PPTimeToTime;
30 using ppapi::TimeToPPTime; 31 using ppapi::TimeToPPTime;
31 using ppapi::thunk::EnterResourceNoLock; 32 using ppapi::thunk::EnterResourceNoLock;
32 using ppapi::thunk::PPB_FileIO_API; 33 using ppapi::thunk::PPB_FileIO_API;
33 using ppapi::thunk::PPB_FileRef_API; 34 using ppapi::thunk::PPB_FileRef_API;
34 35
35 namespace webkit { 36 namespace webkit {
36 namespace ppapi { 37 namespace ppapi {
37 38
38 PPB_FileIO_Impl::CallbackEntry::CallbackEntry() 39 PPB_FileIO_Impl::CallbackEntry::CallbackEntry()
39 : read_buffer(NULL) { 40 : read_buffer(NULL) {
40 } 41 }
41 42
42 PPB_FileIO_Impl::CallbackEntry::CallbackEntry(const CallbackEntry& entry) 43 PPB_FileIO_Impl::CallbackEntry::CallbackEntry(const CallbackEntry& entry)
43 : callback(entry.callback), 44 : callback(entry.callback),
44 read_buffer(entry.read_buffer) { 45 read_buffer(entry.read_buffer) {
45 } 46 }
46 47
47 PPB_FileIO_Impl::CallbackEntry::~CallbackEntry() { 48 PPB_FileIO_Impl::CallbackEntry::~CallbackEntry() {
48 } 49 }
49 50
50 PPB_FileIO_Impl::PPB_FileIO_Impl(PluginInstance* instance) 51 PPB_FileIO_Impl::PPB_FileIO_Impl(PP_Instance instance)
51 : Resource(instance), 52 : Resource(instance),
52 ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)), 53 ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)),
53 file_(base::kInvalidPlatformFileValue), 54 file_(base::kInvalidPlatformFileValue),
54 file_system_type_(PP_FILESYSTEMTYPE_INVALID), 55 file_system_type_(PP_FILESYSTEMTYPE_INVALID),
55 pending_op_(OPERATION_NONE), 56 pending_op_(OPERATION_NONE),
56 info_(NULL) { 57 info_(NULL) {
57 } 58 }
58 59
59 PPB_FileIO_Impl::~PPB_FileIO_Impl() { 60 PPB_FileIO_Impl::~PPB_FileIO_Impl() {
60 Close(); 61 Close();
(...skipping 15 matching lines...) Expand all
76 if (rv != PP_OK) 77 if (rv != PP_OK)
77 return rv; 78 return rv;
78 79
79 int flags = 0; 80 int flags = 0;
80 if (!PepperFileOpenFlagsToPlatformFileFlags(open_flags, &flags)) 81 if (!PepperFileOpenFlagsToPlatformFileFlags(open_flags, &flags))
81 return PP_ERROR_BADARGUMENT; 82 return PP_ERROR_BADARGUMENT;
82 83
83 file_system_type_ = file_ref->GetFileSystemType(); 84 file_system_type_ = file_ref->GetFileSystemType();
84 switch (file_system_type_) { 85 switch (file_system_type_) {
85 case PP_FILESYSTEMTYPE_EXTERNAL: 86 case PP_FILESYSTEMTYPE_EXTERNAL:
86 if (!instance()->delegate()->AsyncOpenFile( 87 if (!GetPluginDelegate()->AsyncOpenFile(
87 file_ref->GetSystemPath(), flags, 88 file_ref->GetSystemPath(), flags,
88 callback_factory_.NewCallback( 89 callback_factory_.NewCallback(
89 &PPB_FileIO_Impl::AsyncOpenFileCallback))) 90 &PPB_FileIO_Impl::AsyncOpenFileCallback)))
90 return PP_ERROR_FAILED; 91 return PP_ERROR_FAILED;
91 break; 92 break;
92 case PP_FILESYSTEMTYPE_LOCALPERSISTENT: 93 case PP_FILESYSTEMTYPE_LOCALPERSISTENT:
93 case PP_FILESYSTEMTYPE_LOCALTEMPORARY: 94 case PP_FILESYSTEMTYPE_LOCALTEMPORARY:
94 file_system_url_ = file_ref->GetFileSystemURL(); 95 file_system_url_ = file_ref->GetFileSystemURL();
95 if (!instance()->delegate()->AsyncOpenFileSystemURL( 96 if (!GetPluginDelegate()->AsyncOpenFileSystemURL(
96 file_system_url_, flags, 97 file_system_url_, flags,
97 callback_factory_.NewCallback( 98 callback_factory_.NewCallback(
98 &PPB_FileIO_Impl::AsyncOpenFileCallback))) 99 &PPB_FileIO_Impl::AsyncOpenFileCallback)))
99 return PP_ERROR_FAILED; 100 return PP_ERROR_FAILED;
100 break; 101 break;
101 default: 102 default:
102 return PP_ERROR_FAILED; 103 return PP_ERROR_FAILED;
103 } 104 }
104 105
105 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL); 106 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL);
106 return PP_OK_COMPLETIONPENDING; 107 return PP_OK_COMPLETIONPENDING;
107 } 108 }
108 109
109 int32_t PPB_FileIO_Impl::Query(PP_FileInfo* info, 110 int32_t PPB_FileIO_Impl::Query(PP_FileInfo* info,
110 PP_CompletionCallback callback) { 111 PP_CompletionCallback callback) {
111 int32_t rv = CommonCallValidation(true, OPERATION_EXCLUSIVE, callback); 112 int32_t rv = CommonCallValidation(true, OPERATION_EXCLUSIVE, callback);
112 if (rv != PP_OK) 113 if (rv != PP_OK)
113 return rv; 114 return rv;
114 115
115 if (!info) 116 if (!info)
116 return PP_ERROR_BADARGUMENT; 117 return PP_ERROR_BADARGUMENT;
117 118
118 DCHECK(!info_); // If |info_|, a callback should be pending (caught above). 119 DCHECK(!info_); // If |info_|, a callback should be pending (caught above).
119 info_ = info; 120 info_ = info;
120 121
121 if (!base::FileUtilProxy::GetFileInfoFromPlatformFile( 122 if (!base::FileUtilProxy::GetFileInfoFromPlatformFile(
122 instance()->delegate()->GetFileThreadMessageLoopProxy(), file_, 123 GetPluginDelegate()->GetFileThreadMessageLoopProxy(), file_,
123 callback_factory_.NewCallback(&PPB_FileIO_Impl::QueryInfoCallback))) 124 callback_factory_.NewCallback(&PPB_FileIO_Impl::QueryInfoCallback)))
124 return PP_ERROR_FAILED; 125 return PP_ERROR_FAILED;
125 126
126 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL); 127 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL);
127 return PP_OK_COMPLETIONPENDING; 128 return PP_OK_COMPLETIONPENDING;
128 } 129 }
129 130
130 int32_t PPB_FileIO_Impl::Touch(PP_Time last_access_time, 131 int32_t PPB_FileIO_Impl::Touch(PP_Time last_access_time,
131 PP_Time last_modified_time, 132 PP_Time last_modified_time,
132 PP_CompletionCallback callback) { 133 PP_CompletionCallback callback) {
133 int32_t rv = CommonCallValidation(true, OPERATION_EXCLUSIVE, callback); 134 int32_t rv = CommonCallValidation(true, OPERATION_EXCLUSIVE, callback);
134 if (rv != PP_OK) 135 if (rv != PP_OK)
135 return rv; 136 return rv;
136 137
137 if (!base::FileUtilProxy::Touch( 138 if (!base::FileUtilProxy::Touch(
138 instance()->delegate()->GetFileThreadMessageLoopProxy(), 139 GetPluginDelegate()->GetFileThreadMessageLoopProxy(),
139 file_, PPTimeToTime(last_access_time), 140 file_, PPTimeToTime(last_access_time),
140 PPTimeToTime(last_modified_time), 141 PPTimeToTime(last_modified_time),
141 callback_factory_.NewCallback(&PPB_FileIO_Impl::StatusCallback))) 142 callback_factory_.NewCallback(&PPB_FileIO_Impl::StatusCallback)))
142 return PP_ERROR_FAILED; 143 return PP_ERROR_FAILED;
143 144
144 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL); 145 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL);
145 return PP_OK_COMPLETIONPENDING; 146 return PP_OK_COMPLETIONPENDING;
146 } 147 }
147 148
148 int32_t PPB_FileIO_Impl::Read(int64_t offset, 149 int32_t PPB_FileIO_Impl::Read(int64_t offset,
149 char* buffer, 150 char* buffer,
150 int32_t bytes_to_read, 151 int32_t bytes_to_read,
151 PP_CompletionCallback callback) { 152 PP_CompletionCallback callback) {
152 int32_t rv = CommonCallValidation(true, OPERATION_READ, callback); 153 int32_t rv = CommonCallValidation(true, OPERATION_READ, callback);
153 if (rv != PP_OK) 154 if (rv != PP_OK)
154 return rv; 155 return rv;
155 156
156 if (!base::FileUtilProxy::Read( 157 if (!base::FileUtilProxy::Read(
157 instance()->delegate()->GetFileThreadMessageLoopProxy(), 158 GetPluginDelegate()->GetFileThreadMessageLoopProxy(),
158 file_, offset, bytes_to_read, 159 file_, offset, bytes_to_read,
159 callback_factory_.NewCallback(&PPB_FileIO_Impl::ReadCallback))) 160 callback_factory_.NewCallback(&PPB_FileIO_Impl::ReadCallback)))
160 return PP_ERROR_FAILED; 161 return PP_ERROR_FAILED;
161 162
162 RegisterCallback(OPERATION_READ, callback, buffer); 163 RegisterCallback(OPERATION_READ, callback, buffer);
163 return PP_OK_COMPLETIONPENDING; 164 return PP_OK_COMPLETIONPENDING;
164 } 165 }
165 166
166 int32_t PPB_FileIO_Impl::Write(int64_t offset, 167 int32_t PPB_FileIO_Impl::Write(int64_t offset,
167 const char* buffer, 168 const char* buffer,
168 int32_t bytes_to_write, 169 int32_t bytes_to_write,
169 PP_CompletionCallback callback) { 170 PP_CompletionCallback callback) {
170 int32_t rv = CommonCallValidation(true, OPERATION_WRITE, callback); 171 int32_t rv = CommonCallValidation(true, OPERATION_WRITE, callback);
171 if (rv != PP_OK) 172 if (rv != PP_OK)
172 return rv; 173 return rv;
173 174
174 if (quota_file_io_.get()) { 175 if (quota_file_io_.get()) {
175 if (!quota_file_io_->Write( 176 if (!quota_file_io_->Write(
176 offset, buffer, bytes_to_write, 177 offset, buffer, bytes_to_write,
177 callback_factory_.NewCallback(&PPB_FileIO_Impl::WriteCallback))) 178 callback_factory_.NewCallback(&PPB_FileIO_Impl::WriteCallback)))
178 return PP_ERROR_FAILED; 179 return PP_ERROR_FAILED;
179 } else { 180 } else {
180 if (!base::FileUtilProxy::Write( 181 if (!base::FileUtilProxy::Write(
181 instance()->delegate()->GetFileThreadMessageLoopProxy(), 182 GetPluginDelegate()->GetFileThreadMessageLoopProxy(),
182 file_, offset, buffer, bytes_to_write, 183 file_, offset, buffer, bytes_to_write,
183 callback_factory_.NewCallback(&PPB_FileIO_Impl::WriteCallback))) 184 callback_factory_.NewCallback(&PPB_FileIO_Impl::WriteCallback)))
184 return PP_ERROR_FAILED; 185 return PP_ERROR_FAILED;
185 } 186 }
186 187
187 RegisterCallback(OPERATION_WRITE, callback, NULL); 188 RegisterCallback(OPERATION_WRITE, callback, NULL);
188 return PP_OK_COMPLETIONPENDING; 189 return PP_OK_COMPLETIONPENDING;
189 } 190 }
190 191
191 int32_t PPB_FileIO_Impl::SetLength(int64_t length, 192 int32_t PPB_FileIO_Impl::SetLength(int64_t length,
192 PP_CompletionCallback callback) { 193 PP_CompletionCallback callback) {
193 int32_t rv = CommonCallValidation(true, OPERATION_EXCLUSIVE, callback); 194 int32_t rv = CommonCallValidation(true, OPERATION_EXCLUSIVE, callback);
194 if (rv != PP_OK) 195 if (rv != PP_OK)
195 return rv; 196 return rv;
196 197
197 if (quota_file_io_.get()) { 198 if (quota_file_io_.get()) {
198 if (!quota_file_io_->SetLength( 199 if (!quota_file_io_->SetLength(
199 length, 200 length,
200 callback_factory_.NewCallback(&PPB_FileIO_Impl::StatusCallback))) 201 callback_factory_.NewCallback(&PPB_FileIO_Impl::StatusCallback)))
201 return PP_ERROR_FAILED; 202 return PP_ERROR_FAILED;
202 } else { 203 } else {
203 if (!base::FileUtilProxy::Truncate( 204 if (!base::FileUtilProxy::Truncate(
204 instance()->delegate()->GetFileThreadMessageLoopProxy(), 205 GetPluginDelegate()->GetFileThreadMessageLoopProxy(),
205 file_, length, 206 file_, length,
206 callback_factory_.NewCallback(&PPB_FileIO_Impl::StatusCallback))) 207 callback_factory_.NewCallback(&PPB_FileIO_Impl::StatusCallback)))
207 return PP_ERROR_FAILED; 208 return PP_ERROR_FAILED;
208 } 209 }
209 210
210 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL); 211 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL);
211 return PP_OK_COMPLETIONPENDING; 212 return PP_OK_COMPLETIONPENDING;
212 } 213 }
213 214
214 int32_t PPB_FileIO_Impl::Flush(PP_CompletionCallback callback) { 215 int32_t PPB_FileIO_Impl::Flush(PP_CompletionCallback callback) {
215 int32_t rv = CommonCallValidation(true, OPERATION_EXCLUSIVE, callback); 216 int32_t rv = CommonCallValidation(true, OPERATION_EXCLUSIVE, callback);
216 if (rv != PP_OK) 217 if (rv != PP_OK)
217 return rv; 218 return rv;
218 219
219 if (!base::FileUtilProxy::Flush( 220 if (!base::FileUtilProxy::Flush(
220 instance()->delegate()->GetFileThreadMessageLoopProxy(), file_, 221 GetPluginDelegate()->GetFileThreadMessageLoopProxy(), file_,
221 callback_factory_.NewCallback(&PPB_FileIO_Impl::StatusCallback))) 222 callback_factory_.NewCallback(&PPB_FileIO_Impl::StatusCallback)))
222 return PP_ERROR_FAILED; 223 return PP_ERROR_FAILED;
223 224
224 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL); 225 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL);
225 return PP_OK_COMPLETIONPENDING; 226 return PP_OK_COMPLETIONPENDING;
226 } 227 }
227 228
228 void PPB_FileIO_Impl::Close() { 229 void PPB_FileIO_Impl::Close() {
229 if (file_ != base::kInvalidPlatformFileValue) { 230 if (file_ != base::kInvalidPlatformFileValue) {
230 base::FileUtilProxy::Close( 231 base::FileUtilProxy::Close(
231 instance()->delegate()->GetFileThreadMessageLoopProxy(), file_, NULL); 232 GetPluginDelegate()->GetFileThreadMessageLoopProxy(), file_, NULL);
232 file_ = base::kInvalidPlatformFileValue; 233 file_ = base::kInvalidPlatformFileValue;
233 quota_file_io_.reset(); 234 quota_file_io_.reset();
234 } 235 }
235 } 236 }
236 237
237 int32_t PPB_FileIO_Impl::GetOSFileDescriptor() { 238 int32_t PPB_FileIO_Impl::GetOSFileDescriptor() {
238 #if defined(OS_POSIX) 239 #if defined(OS_POSIX)
239 return file_; 240 return file_;
240 #elif defined(OS_WIN) 241 #elif defined(OS_WIN)
241 return reinterpret_cast<uintptr_t>(file_); 242 return reinterpret_cast<uintptr_t>(file_);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 309
309 void PPB_FileIO_Impl::RegisterCallback(OperationType op, 310 void PPB_FileIO_Impl::RegisterCallback(OperationType op,
310 PP_CompletionCallback callback, 311 PP_CompletionCallback callback,
311 char* read_buffer) { 312 char* read_buffer) {
312 DCHECK(callback.func); 313 DCHECK(callback.func);
313 DCHECK(pending_op_ == OPERATION_NONE || 314 DCHECK(pending_op_ == OPERATION_NONE ||
314 (pending_op_ != OPERATION_EXCLUSIVE && pending_op_ == op)); 315 (pending_op_ != OPERATION_EXCLUSIVE && pending_op_ == op));
315 316
316 CallbackEntry entry; 317 CallbackEntry entry;
317 entry.callback = new TrackedCompletionCallback( 318 entry.callback = new TrackedCompletionCallback(
318 instance()->module()->GetCallbackTracker(), pp_resource(), callback); 319 ResourceHelper::GetPluginModule(this)->GetCallbackTracker(),
320 pp_resource(), callback);
319 entry.read_buffer = read_buffer; 321 entry.read_buffer = read_buffer;
320 322
321 callbacks_.push(entry); 323 callbacks_.push(entry);
322 pending_op_ = op; 324 pending_op_ = op;
323 } 325 }
324 326
325 void PPB_FileIO_Impl::RunAndRemoveFirstPendingCallback(int32_t result) { 327 void PPB_FileIO_Impl::RunAndRemoveFirstPendingCallback(int32_t result) {
326 DCHECK(!callbacks_.empty()); 328 DCHECK(!callbacks_.empty());
327 329
328 CallbackEntry front = callbacks_.front(); 330 CallbackEntry front = callbacks_.front();
(...skipping 22 matching lines...) Expand all
351 } 353 }
352 354
353 DCHECK(file_ == base::kInvalidPlatformFileValue); 355 DCHECK(file_ == base::kInvalidPlatformFileValue);
354 file_ = file.ReleaseValue(); 356 file_ = file.ReleaseValue();
355 357
356 DCHECK(!quota_file_io_.get()); 358 DCHECK(!quota_file_io_.get());
357 if (file_ != base::kInvalidPlatformFileValue && 359 if (file_ != base::kInvalidPlatformFileValue &&
358 (file_system_type_ == PP_FILESYSTEMTYPE_LOCALTEMPORARY || 360 (file_system_type_ == PP_FILESYSTEMTYPE_LOCALTEMPORARY ||
359 file_system_type_ == PP_FILESYSTEMTYPE_LOCALPERSISTENT)) { 361 file_system_type_ == PP_FILESYSTEMTYPE_LOCALPERSISTENT)) {
360 quota_file_io_.reset(new QuotaFileIO( 362 quota_file_io_.reset(new QuotaFileIO(
361 instance(), file_, file_system_url_, file_system_type_)); 363 pp_instance(), file_, file_system_url_, file_system_type_));
362 } 364 }
363 365
364 RunAndRemoveFirstPendingCallback(PlatformFileErrorToPepperError(error_code)); 366 RunAndRemoveFirstPendingCallback(PlatformFileErrorToPepperError(error_code));
365 } 367 }
366 368
367 void PPB_FileIO_Impl::QueryInfoCallback( 369 void PPB_FileIO_Impl::QueryInfoCallback(
368 base::PlatformFileError error_code, 370 base::PlatformFileError error_code,
369 const base::PlatformFileInfo& file_info) { 371 const base::PlatformFileInfo& file_info) {
370 if (pending_op_ != OPERATION_EXCLUSIVE || callbacks_.empty()) { 372 if (pending_op_ != OPERATION_EXCLUSIVE || callbacks_.empty()) {
371 NOTREACHED(); 373 NOTREACHED();
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 } 436 }
435 437
436 if (error_code != base::PLATFORM_FILE_OK) { 438 if (error_code != base::PLATFORM_FILE_OK) {
437 RunAndRemoveFirstPendingCallback( 439 RunAndRemoveFirstPendingCallback(
438 PlatformFileErrorToPepperError(error_code)); 440 PlatformFileErrorToPepperError(error_code));
439 } else { 441 } else {
440 RunAndRemoveFirstPendingCallback(bytes_written); 442 RunAndRemoveFirstPendingCallback(bytes_written);
441 } 443 }
442 } 444 }
443 445
446 PluginDelegate* PPB_FileIO_Impl::GetPluginDelegate() const {
447 return ResourceHelper::GetPluginDelegate(this);
448 }
449
444 } // namespace ppapi 450 } // namespace ppapi
445 } // namespace webkit 451 } // namespace webkit
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698