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

Side by Side Diff: win8/metro_driver/file_picker_ash.cc

Issue 119733002: Add base:: to string16s in win8/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 7 years 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 | « win8/metro_driver/file_picker_ash.h ('k') | win8/metro_driver/ime/text_service.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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "stdafx.h" 5 #include "stdafx.h"
6 #include "win8/metro_driver/file_picker_ash.h" 6 #include "win8/metro_driver/file_picker_ash.h"
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 10 matching lines...) Expand all
21 namespace winstorage = ABI::Windows::Storage; 21 namespace winstorage = ABI::Windows::Storage;
22 typedef winfoundtn::Collections::IVector<HSTRING> StringVectorItf; 22 typedef winfoundtn::Collections::IVector<HSTRING> StringVectorItf;
23 23
24 // TODO(siggi): Complete this implementation and move it to a common place. 24 // TODO(siggi): Complete this implementation and move it to a common place.
25 class StringVectorImpl : public mswr::RuntimeClass<StringVectorItf> { 25 class StringVectorImpl : public mswr::RuntimeClass<StringVectorItf> {
26 public: 26 public:
27 ~StringVectorImpl() { 27 ~StringVectorImpl() {
28 std::for_each(strings_.begin(), strings_.end(), ::WindowsDeleteString); 28 std::for_each(strings_.begin(), strings_.end(), ::WindowsDeleteString);
29 } 29 }
30 30
31 HRESULT RuntimeClassInitialize(const std::vector<string16>& list) { 31 HRESULT RuntimeClassInitialize(const std::vector<base::string16>& list) {
32 for (size_t i = 0; i < list.size(); ++i) 32 for (size_t i = 0; i < list.size(); ++i)
33 strings_.push_back(MakeHString(list[i])); 33 strings_.push_back(MakeHString(list[i]));
34 34
35 return S_OK; 35 return S_OK;
36 } 36 }
37 37
38 // IVector<HSTRING> implementation. 38 // IVector<HSTRING> implementation.
39 STDMETHOD(GetAt)(unsigned index, HSTRING* item) { 39 STDMETHOD(GetAt)(unsigned index, HSTRING* item) {
40 if (index >= strings_.size()) 40 if (index >= strings_.size())
41 return E_INVALIDARG; 41 return E_INVALIDARG;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 return E_NOTIMPL; 75 return E_NOTIMPL;
76 } 76 }
77 77
78 private: 78 private:
79 std::vector<HSTRING> strings_; 79 std::vector<HSTRING> strings_;
80 }; 80 };
81 81
82 } // namespace 82 } // namespace
83 83
84 FilePickerSessionBase::FilePickerSessionBase(ChromeAppViewAsh* app_view, 84 FilePickerSessionBase::FilePickerSessionBase(ChromeAppViewAsh* app_view,
85 const string16& title, 85 const base::string16& title,
86 const string16& filter, 86 const base::string16& filter,
87 const base::FilePath& default_path) 87 const base::FilePath& default_path)
88 : app_view_(app_view), 88 : app_view_(app_view),
89 title_(title), 89 title_(title),
90 filter_(filter), 90 filter_(filter),
91 default_path_(default_path), 91 default_path_(default_path),
92 success_(false) { 92 success_(false) {
93 } 93 }
94 94
95 bool FilePickerSessionBase::Run() { 95 bool FilePickerSessionBase::Run() {
96 if (!DoFilePicker()) 96 if (!DoFilePicker())
(...skipping 13 matching lines...) Expand all
110 if (FAILED(hr)) { 110 if (FAILED(hr)) {
111 LOG(ERROR) << "Failed to start file picker, error 0x" 111 LOG(ERROR) << "Failed to start file picker, error 0x"
112 << std::hex << hr; 112 << std::hex << hr;
113 return false; 113 return false;
114 } 114 }
115 return true; 115 return true;
116 } 116 }
117 117
118 OpenFilePickerSession::OpenFilePickerSession( 118 OpenFilePickerSession::OpenFilePickerSession(
119 ChromeAppViewAsh* app_view, 119 ChromeAppViewAsh* app_view,
120 const string16& title, 120 const base::string16& title,
121 const string16& filter, 121 const base::string16& filter,
122 const base::FilePath& default_path, 122 const base::FilePath& default_path,
123 bool allow_multi_select) 123 bool allow_multi_select)
124 : FilePickerSessionBase(app_view, title, filter, default_path), 124 : FilePickerSessionBase(app_view, title, filter, default_path),
125 allow_multi_select_(allow_multi_select) { 125 allow_multi_select_(allow_multi_select) {
126 } 126 }
127 127
128 HRESULT OpenFilePickerSession::SinglePickerDone(SingleFileAsyncOp* async, 128 HRESULT OpenFilePickerSession::SinglePickerDone(SingleFileAsyncOp* async,
129 AsyncStatus status) { 129 AsyncStatus status) {
130 if (status == Completed) { 130 if (status == Completed) {
131 mswr::ComPtr<winstorage::IStorageFile> file; 131 mswr::ComPtr<winstorage::IStorageFile> file;
(...skipping 26 matching lines...) Expand all
158 return S_OK; 158 return S_OK;
159 } 159 }
160 160
161 HRESULT OpenFilePickerSession::MultiPickerDone(MultiFileAsyncOp* async, 161 HRESULT OpenFilePickerSession::MultiPickerDone(MultiFileAsyncOp* async,
162 AsyncStatus status) { 162 AsyncStatus status) {
163 if (status == Completed) { 163 if (status == Completed) {
164 mswr::ComPtr<StorageFileVectorCollection> files; 164 mswr::ComPtr<StorageFileVectorCollection> files;
165 HRESULT hr = async->GetResults(files.GetAddressOf()); 165 HRESULT hr = async->GetResults(files.GetAddressOf());
166 166
167 if (files) { 167 if (files) {
168 string16 result; 168 base::string16 result;
169 if (SUCCEEDED(hr)) 169 if (SUCCEEDED(hr))
170 hr = ComposeMultiFileResult(files.Get(), &result); 170 hr = ComposeMultiFileResult(files.Get(), &result);
171 171
172 if (SUCCEEDED(hr)) { 172 if (SUCCEEDED(hr)) {
173 success_ = true; 173 success_ = true;
174 // The code below has been copied from the 174 // The code below has been copied from the
175 // SelectFileDialogImpl::RunOpenMultiFileDialog function in 175 // SelectFileDialogImpl::RunOpenMultiFileDialog function in
176 // select_file_dialog_win.cc. 176 // select_file_dialog_win.cc.
177 // TODO(ananta) 177 // TODO(ananta)
178 // Consolidate this into a common place. 178 // Consolidate this into a common place.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 const wchar_t* walk = filter_.c_str(); 236 const wchar_t* walk = filter_.c_str();
237 while (*walk != L'\0') { 237 while (*walk != L'\0') {
238 // Walk past the description. 238 // Walk past the description.
239 walk += wcslen(walk) + 1; 239 walk += wcslen(walk) + 1;
240 240
241 // We should have an extension, but bail on malformed filters. 241 // We should have an extension, but bail on malformed filters.
242 if (*walk == L'\0') 242 if (*walk == L'\0')
243 break; 243 break;
244 244
245 // There can be a single extension, or a list of semicolon-separated ones. 245 // There can be a single extension, or a list of semicolon-separated ones.
246 std::vector<string16> extensions_win32_style; 246 std::vector<base::string16> extensions_win32_style;
247 size_t extension_count = Tokenize(walk, L";", &extensions_win32_style); 247 size_t extension_count = Tokenize(walk, L";", &extensions_win32_style);
248 DCHECK_EQ(extension_count, extensions_win32_style.size()); 248 DCHECK_EQ(extension_count, extensions_win32_style.size());
249 249
250 // Metro wants suffixes only, not patterns. 250 // Metro wants suffixes only, not patterns.
251 mswrw::HString extension; 251 mswrw::HString extension;
252 for (size_t i = 0; i < extensions_win32_style.size(); ++i) { 252 for (size_t i = 0; i < extensions_win32_style.size(); ++i) {
253 if (extensions_win32_style[i] == L"*.*") { 253 if (extensions_win32_style[i] == L"*.*") {
254 // The wildcard filter is "*" for Metro. The string "*.*" produces 254 // The wildcard filter is "*" for Metro. The string "*.*" produces
255 // an "invalid parameter" error. 255 // an "invalid parameter" error.
256 hr = extension.Set(L"*"); 256 hr = extension.Set(L"*");
257 } else { 257 } else {
258 // Metro wants suffixes only, not patterns. 258 // Metro wants suffixes only, not patterns.
259 string16 ext = base::FilePath(extensions_win32_style[i]).Extension(); 259 base::string16 ext =
260 base::FilePath(extensions_win32_style[i]).Extension();
260 if ((ext.size() < 2) || 261 if ((ext.size() < 2) ||
261 (ext.find_first_of(L"*?") != string16::npos)) { 262 (ext.find_first_of(L"*?") != base::string16::npos)) {
262 continue; 263 continue;
263 } 264 }
264 hr = extension.Set(ext.c_str()); 265 hr = extension.Set(ext.c_str());
265 } 266 }
266 if (SUCCEEDED(hr)) 267 if (SUCCEEDED(hr))
267 hr = filter->Append(extension.Get()); 268 hr = filter->Append(extension.Get());
268 if (FAILED(hr)) 269 if (FAILED(hr))
269 return hr; 270 return hr;
270 } 271 }
271 272
(...skipping 30 matching lines...) Expand all
302 mswr::ComPtr<HandlerDoneType> handler(mswr::Callback<HandlerDoneType>( 303 mswr::ComPtr<HandlerDoneType> handler(mswr::Callback<HandlerDoneType>(
303 this, &OpenFilePickerSession::SinglePickerDone)); 304 this, &OpenFilePickerSession::SinglePickerDone));
304 DCHECK(handler.Get() != NULL); 305 DCHECK(handler.Get() != NULL);
305 hr = completion->put_Completed(handler.Get()); 306 hr = completion->put_Completed(handler.Get());
306 307
307 return hr; 308 return hr;
308 } 309 }
309 } 310 }
310 311
311 HRESULT OpenFilePickerSession::ComposeMultiFileResult( 312 HRESULT OpenFilePickerSession::ComposeMultiFileResult(
312 StorageFileVectorCollection* files, string16* result) { 313 StorageFileVectorCollection* files, base::string16* result) {
313 DCHECK(files != NULL); 314 DCHECK(files != NULL);
314 DCHECK(result != NULL); 315 DCHECK(result != NULL);
315 316
316 // Empty the output string. 317 // Empty the output string.
317 result->clear(); 318 result->clear();
318 319
319 unsigned int num_files = 0; 320 unsigned int num_files = 0;
320 HRESULT hr = files->get_Size(&num_files); 321 HRESULT hr = files->get_Size(&num_files);
321 if (FAILED(hr)) 322 if (FAILED(hr))
322 return hr; 323 return hr;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 return hr; 418 return hr;
418 419
419 // Walk past the description. 420 // Walk past the description.
420 walk += wcslen(walk) + 1; 421 walk += wcslen(walk) + 1;
421 422
422 // We should have an extension, but bail on malformed filters. 423 // We should have an extension, but bail on malformed filters.
423 if (*walk == L'\0') 424 if (*walk == L'\0')
424 break; 425 break;
425 426
426 // There can be a single extension, or a list of semicolon-separated ones. 427 // There can be a single extension, or a list of semicolon-separated ones.
427 std::vector<string16> extensions_win32_style; 428 std::vector<base::string16> extensions_win32_style;
428 size_t extension_count = Tokenize(walk, L";", &extensions_win32_style); 429 size_t extension_count = Tokenize(walk, L";", &extensions_win32_style);
429 DCHECK_EQ(extension_count, extensions_win32_style.size()); 430 DCHECK_EQ(extension_count, extensions_win32_style.size());
430 431
431 // Metro wants suffixes only, not patterns. Also, metro does not support 432 // Metro wants suffixes only, not patterns. Also, metro does not support
432 // the all files ("*") pattern in the save picker. 433 // the all files ("*") pattern in the save picker.
433 std::vector<string16> extensions; 434 std::vector<base::string16> extensions;
434 for (size_t i = 0; i < extensions_win32_style.size(); ++i) { 435 for (size_t i = 0; i < extensions_win32_style.size(); ++i) {
435 string16 ext = base::FilePath(extensions_win32_style[i]).Extension(); 436 base::string16 ext =
437 base::FilePath(extensions_win32_style[i]).Extension();
436 if ((ext.size() < 2) || 438 if ((ext.size() < 2) ||
437 (ext.find_first_of(L"*?") != string16::npos)) 439 (ext.find_first_of(L"*?") != base::string16::npos))
438 continue; 440 continue;
439 extensions.push_back(ext); 441 extensions.push_back(ext);
440 } 442 }
441 443
442 if (!extensions.empty()) { 444 if (!extensions.empty()) {
443 // Convert to a Metro collection class. 445 // Convert to a Metro collection class.
444 mswr::ComPtr<StringVectorItf> list; 446 mswr::ComPtr<StringVectorItf> list;
445 hr = mswr::MakeAndInitialize<StringVectorImpl>( 447 hr = mswr::MakeAndInitialize<StringVectorImpl>(
446 list.GetAddressOf(), extensions); 448 list.GetAddressOf(), extensions);
447 if (FAILED(hr)) 449 if (FAILED(hr))
(...skipping 24 matching lines...) Expand all
472 // TODO(grt): Get a properly translated string. This can't be done from 474 // TODO(grt): Get a properly translated string. This can't be done from
473 // within metro_driver. Consider preprocessing the filter list in Chrome 475 // within metro_driver. Consider preprocessing the filter list in Chrome
474 // land to ensure it has this entry if all others are patterns. In that 476 // land to ensure it has this entry if all others are patterns. In that
475 // case, this whole block of code can be removed. 477 // case, this whole block of code can be removed.
476 hr = description.Set(L"Data File"); 478 hr = description.Set(L"Data File");
477 if (FAILED(hr)) 479 if (FAILED(hr))
478 return hr; 480 return hr;
479 481
480 mswr::ComPtr<StringVectorItf> list; 482 mswr::ComPtr<StringVectorItf> list;
481 hr = mswr::MakeAndInitialize<StringVectorImpl>( 483 hr = mswr::MakeAndInitialize<StringVectorImpl>(
482 list.GetAddressOf(), std::vector<string16>(1, L".dat")); 484 list.GetAddressOf(), std::vector<base::string16>(1, L".dat"));
483 if (FAILED(hr)) 485 if (FAILED(hr))
484 return hr; 486 return hr;
485 487
486 boolean replaced = FALSE; 488 boolean replaced = FALSE;
487 hr = choices->Insert(description.Get(), list.Get(), &replaced); 489 hr = choices->Insert(description.Get(), list.Get(), &replaced);
488 if (FAILED(hr)) 490 if (FAILED(hr))
489 return hr; 491 return hr;
490 DCHECK_EQ(FALSE, replaced); 492 DCHECK_EQ(FALSE, replaced);
491 } 493 }
492 494
493 if (!default_path_.empty()) { 495 if (!default_path_.empty()) {
494 string16 file_part = default_path_.BaseName().value(); 496 base::string16 file_part = default_path_.BaseName().value();
495 // If the suggested_name is a root directory, then don't set it as the 497 // If the suggested_name is a root directory, then don't set it as the
496 // suggested name. 498 // suggested name.
497 if (file_part.size() == 1 && file_part[0] == L'\\') 499 if (file_part.size() == 1 && file_part[0] == L'\\')
498 file_part.clear(); 500 file_part.clear();
499 hr = picker->put_SuggestedFileName( 501 hr = picker->put_SuggestedFileName(
500 mswrw::HStringReference(file_part.c_str()).Get()); 502 mswrw::HStringReference(file_part.c_str()).Get());
501 if (FAILED(hr)) 503 if (FAILED(hr))
502 return hr; 504 return hr;
503 } 505 }
504 506
(...skipping 22 matching lines...) Expand all
527 if (file) { 529 if (file) {
528 mswr::ComPtr<winstorage::IStorageItem> storage_item; 530 mswr::ComPtr<winstorage::IStorageItem> storage_item;
529 if (SUCCEEDED(hr)) 531 if (SUCCEEDED(hr))
530 hr = file.As(&storage_item); 532 hr = file.As(&storage_item);
531 533
532 mswrw::HString file_path; 534 mswrw::HString file_path;
533 if (SUCCEEDED(hr)) 535 if (SUCCEEDED(hr))
534 hr = storage_item->get_Path(file_path.GetAddressOf()); 536 hr = storage_item->get_Path(file_path.GetAddressOf());
535 537
536 if (SUCCEEDED(hr)) { 538 if (SUCCEEDED(hr)) {
537 string16 path_str = MakeStdWString(file_path.Get()); 539 base::string16 path_str = MakeStdWString(file_path.Get());
538 result_ = path_str; 540 result_ = path_str;
539 success_ = true; 541 success_ = true;
540 } 542 }
541 } else { 543 } else {
542 LOG(ERROR) << "NULL IStorageItem"; 544 LOG(ERROR) << "NULL IStorageItem";
543 } 545 }
544 } else { 546 } else {
545 LOG(ERROR) << "Unexpected async status " << static_cast<int>(status); 547 LOG(ERROR) << "Unexpected async status " << static_cast<int>(status);
546 } 548 }
547 app_view_->OnSaveFileCompleted(this, success_); 549 app_view_->OnSaveFileCompleted(this, success_);
548 return S_OK; 550 return S_OK;
549 } 551 }
550 552
551 FolderPickerSession::FolderPickerSession(ChromeAppViewAsh* app_view, 553 FolderPickerSession::FolderPickerSession(ChromeAppViewAsh* app_view,
552 const string16& title) 554 const base::string16& title)
553 : FilePickerSessionBase(app_view, title, L"", base::FilePath()) {} 555 : FilePickerSessionBase(app_view, title, L"", base::FilePath()) {}
554 556
555 HRESULT FolderPickerSession::StartFilePicker() { 557 HRESULT FolderPickerSession::StartFilePicker() {
556 mswrw::HStringReference class_name( 558 mswrw::HStringReference class_name(
557 RuntimeClass_Windows_Storage_Pickers_FolderPicker); 559 RuntimeClass_Windows_Storage_Pickers_FolderPicker);
558 560
559 // Create the folder picker. 561 // Create the folder picker.
560 mswr::ComPtr<winstorage::Pickers::IFolderPicker> picker; 562 mswr::ComPtr<winstorage::Pickers::IFolderPicker> picker;
561 HRESULT hr = ::Windows::Foundation::ActivateInstance( 563 HRESULT hr = ::Windows::Foundation::ActivateInstance(
562 class_name.Get(), picker.GetAddressOf()); 564 class_name.Get(), picker.GetAddressOf());
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 if (folder) { 598 if (folder) {
597 mswr::ComPtr<winstorage::IStorageItem> storage_item; 599 mswr::ComPtr<winstorage::IStorageItem> storage_item;
598 if (SUCCEEDED(hr)) 600 if (SUCCEEDED(hr))
599 hr = folder.As(&storage_item); 601 hr = folder.As(&storage_item);
600 602
601 mswrw::HString file_path; 603 mswrw::HString file_path;
602 if (SUCCEEDED(hr)) 604 if (SUCCEEDED(hr))
603 hr = storage_item->get_Path(file_path.GetAddressOf()); 605 hr = storage_item->get_Path(file_path.GetAddressOf());
604 606
605 if (SUCCEEDED(hr)) { 607 if (SUCCEEDED(hr)) {
606 string16 path_str = MakeStdWString(file_path.Get()); 608 base::string16 path_str = MakeStdWString(file_path.Get());
607 result_ = path_str; 609 result_ = path_str;
608 success_ = true; 610 success_ = true;
609 } 611 }
610 } else { 612 } else {
611 LOG(ERROR) << "NULL IStorageItem"; 613 LOG(ERROR) << "NULL IStorageItem";
612 } 614 }
613 } else { 615 } else {
614 LOG(ERROR) << "Unexpected async status " << static_cast<int>(status); 616 LOG(ERROR) << "Unexpected async status " << static_cast<int>(status);
615 } 617 }
616 app_view_->OnFolderPickerCompleted(this, success_); 618 app_view_->OnFolderPickerCompleted(this, success_);
617 return S_OK; 619 return S_OK;
618 } 620 }
619 621
OLDNEW
« no previous file with comments | « win8/metro_driver/file_picker_ash.h ('k') | win8/metro_driver/ime/text_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698