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

Side by Side Diff: webkit/fileapi/mtp_device_interface_win.cc

Issue 10781014: Isolated FS for media devices. (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
OLDNEW
(Empty)
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.
4
5 #include "webkit/fileapi/mtp_device_interface_win.h"
6
7 #include "base/logging.h"
8
9 #define CLIENT_NAME L"WPD Chromium"
10 #define CLIENT_MAJOR_VER 1
11 #define CLIENT_MINOR_VER 0
12 #define CLIENT_REVISION 2
13
14 namespace fileapi {
15
16 MtpDeviceInterfaceWin::MtpDeviceInterfaceWin(
17 const FilePath::StringType& device_id)
18 : device_id_(device_id) {
19 CoInitialize(NULL);
20 bool res = Init();
21 DCHECK(res);
22 }
23
24 MtpDeviceInterfaceWin::~MtpDeviceInterfaceWin() {
25 pdevice_.Release();
26 CoUninitialize();
kinuko 2012/07/26 00:38:06 Is it really ok to call these on another thread fr
kmadhusu 2012/07/27 02:13:41 That should be okay. I removed the win specific co
27 }
28
29 bool MtpDeviceInterfaceWin::Init() {
30 HRESULT hr = pdevice_.CreateInstance(__uuidof(PortableDevice),
31 NULL,
32 CLSCTX_INPROC_SERVER);
33 if (FAILED(hr))
34 return false;
35
36 base::win::ScopedComPtr<IPortableDeviceValues> client_info;
37 // Fill out information about your application, so the device knows
38 // who they are speaking to. Client information is optional. The client
39 // can choose to identify itself, or to remain unknown to the driver. It is
40 // beneficial to identify yourself because drivers may be able to optimize
41 // their behavior for known clients.
42
43 // CoCreate an IPortableDeviceValues interface to hold the client
44 // information.
45 hr = client_info.CreateInstance(__uuidof(PortableDeviceValues),
46 NULL,
47 CLSCTX_INPROC_SERVER);
48 if (FAILED(hr))
49 return false;
50
51 // Attempt to set all bits of client information
52 hr = client_info->SetStringValue(WPD_CLIENT_NAME, CLIENT_NAME);
53 if (FAILED(hr))
54 LOG(INFO) << "Failed to set WPD_CLIENT_NAME ";
55
56 hr = client_info->SetUnsignedIntegerValue(WPD_CLIENT_MAJOR_VERSION,
57 CLIENT_MAJOR_VER);
58 if (FAILED(hr))
59 LOG(INFO) << "Failed to set WPD_CLIENT_MAJOR_VERSION";
60
61 hr = client_info->SetUnsignedIntegerValue(WPD_CLIENT_REVISION,
62 CLIENT_REVISION);
63 if (FAILED(hr))
64 LOG(INFO) << "Failed to set WPD_CLIENT_REVISION";
65
66 // Some device drivers need to impersonate the caller in order to function
67 // correctly. Since our application does not need to restrict its identity,
68 // specify SECURITY_IMPERSONATION so that we work with all devices.
69 hr = client_info->SetUnsignedIntegerValue(
70 WPD_CLIENT_SECURITY_QUALITY_OF_SERVICE, SECURITY_IMPERSONATION);
71 if (FAILED(hr))
72 LOG(INFO) << "Failed to set WPD_CLIENT_SECURITY_QUALITY_OF_SERVICE";
73
74 hr = pdevice_->Open(const_cast<wchar_t*>(device_id_.c_str()), client_info);
75 if (FAILED(hr)) {
76 if (hr == E_ACCESSDENIED) {
77 // Failed to Open the device for Read Write access, will open it for
78 // Read-only access instead.
79 client_info->SetUnsignedIntegerValue(WPD_CLIENT_DESIRED_ACCESS,
80 GENERIC_READ);
81 hr = pdevice_->Open(const_cast<wchar_t*>(device_id_.c_str()),
82 client_info);
83 if (FAILED(hr))
84 return false;
85 } else {
86 return false;
87 }
88 }
89 return true;
90 }
91
92 PlatformFileError MtpDeviceInterfaceWin::GetFileInfo(
93 const FilePath& file_path,
94 PlatformFileInfo* file_info) {
95 NOTIMPLEMENTED();
96 return base::PLATFORM_FILE_ERROR_SECURITY;
97 }
98
99 FileSystemFileUtil::AbstractFileEnumerator*
100 MtpDeviceInterfaceWin::CreateFileEnumerator(
101 const FilePath& root,
102 bool recursive) {
103 NOTIMPLEMENTED();
104 return new FileSystemFileUtil::EmptyFileEnumerator();
105 }
106
107 PlatformFileError MtpDeviceInterfaceWin::Touch(
108 const FilePath& file_path,
109 const base::Time& last_access_time,
110 const base::Time& last_modified_time) {
111 NOTIMPLEMENTED();
112 return base::PLATFORM_FILE_ERROR_SECURITY;
113 }
114
115 bool MtpDeviceInterfaceWin::PathExists(const FilePath& file_path) {
116 NOTIMPLEMENTED();
117 return false;
118 }
119
120 bool MtpDeviceInterfaceWin::DirectoryExists(const FilePath& file_path) {
121 NOTIMPLEMENTED();
122 return false;
123 }
124
125 bool MtpDeviceInterfaceWin::IsDirectoryEmpty(const FilePath& file_path) {
126 NOTIMPLEMENTED();
127 return false;
128 }
129
130 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698