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

Side by Side Diff: win8/metro_driver/file_picker.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/chrome_url_launch_handler.cc ('k') | win8/metro_driver/file_picker_ash.h » ('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 "stdafx.h" 5 #include "stdafx.h"
6 #include "win8/metro_driver/file_picker.h" 6 #include "win8/metro_driver/file_picker.h"
7 7
8 #include <windows.storage.pickers.h> 8 #include <windows.storage.pickers.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 12 matching lines...) Expand all
23 namespace winstorage = ABI::Windows::Storage; 23 namespace winstorage = ABI::Windows::Storage;
24 typedef winfoundtn::Collections::IVector<HSTRING> StringVectorItf; 24 typedef winfoundtn::Collections::IVector<HSTRING> StringVectorItf;
25 25
26 // TODO(siggi): Complete this implementation and move it to a common place. 26 // TODO(siggi): Complete this implementation and move it to a common place.
27 class StringVectorImpl : public mswr::RuntimeClass<StringVectorItf> { 27 class StringVectorImpl : public mswr::RuntimeClass<StringVectorItf> {
28 public: 28 public:
29 ~StringVectorImpl() { 29 ~StringVectorImpl() {
30 std::for_each(strings_.begin(), strings_.end(), ::WindowsDeleteString); 30 std::for_each(strings_.begin(), strings_.end(), ::WindowsDeleteString);
31 } 31 }
32 32
33 HRESULT RuntimeClassInitialize(const std::vector<string16>& list) { 33 HRESULT RuntimeClassInitialize(const std::vector<base::string16>& list) {
34 for (size_t i = 0; i < list.size(); ++i) 34 for (size_t i = 0; i < list.size(); ++i)
35 strings_.push_back(MakeHString(list[i])); 35 strings_.push_back(MakeHString(list[i]));
36 36
37 return S_OK; 37 return S_OK;
38 } 38 }
39 39
40 // IVector<HSTRING> implementation. 40 // IVector<HSTRING> implementation.
41 STDMETHOD(GetAt)(unsigned index, HSTRING* item) { 41 STDMETHOD(GetAt)(unsigned index, HSTRING* item) {
42 if (index >= strings_.size()) 42 if (index >= strings_.size())
43 return E_INVALIDARG; 43 return E_INVALIDARG;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 125
126 // Called asynchronously when a single file picker is done. 126 // Called asynchronously when a single file picker is done.
127 HRESULT SinglePickerDone(SingleFileAsyncOp* async, AsyncStatus status); 127 HRESULT SinglePickerDone(SingleFileAsyncOp* async, AsyncStatus status);
128 128
129 // Called asynchronously when a multi file picker is done. 129 // Called asynchronously when a multi file picker is done.
130 HRESULT MultiPickerDone(MultiFileAsyncOp* async, AsyncStatus status); 130 HRESULT MultiPickerDone(MultiFileAsyncOp* async, AsyncStatus status);
131 131
132 // Composes a multi-file result string suitable for returning to a 132 // Composes a multi-file result string suitable for returning to a
133 // from a storage file collection. 133 // from a storage file collection.
134 static HRESULT ComposeMultiFileResult(StorageFileVectorCollection* files, 134 static HRESULT ComposeMultiFileResult(StorageFileVectorCollection* files,
135 string16* result); 135 base::string16* result);
136 private: 136 private:
137 DISALLOW_COPY_AND_ASSIGN(OpenFilePickerSession); 137 DISALLOW_COPY_AND_ASSIGN(OpenFilePickerSession);
138 }; 138 };
139 139
140 class SaveFilePickerSession : public FilePickerSessionBase { 140 class SaveFilePickerSession : public FilePickerSessionBase {
141 public: 141 public:
142 explicit SaveFilePickerSession(OPENFILENAME* open_file_name); 142 explicit SaveFilePickerSession(OPENFILENAME* open_file_name);
143 143
144 private: 144 private:
145 virtual HRESULT StartFilePicker() OVERRIDE; 145 virtual HRESULT StartFilePicker() OVERRIDE;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 return S_OK; 236 return S_OK;
237 } 237 }
238 238
239 HRESULT OpenFilePickerSession::MultiPickerDone(MultiFileAsyncOp* async, 239 HRESULT OpenFilePickerSession::MultiPickerDone(MultiFileAsyncOp* async,
240 AsyncStatus status) { 240 AsyncStatus status) {
241 if (status == Completed) { 241 if (status == Completed) {
242 mswr::ComPtr<StorageFileVectorCollection> files; 242 mswr::ComPtr<StorageFileVectorCollection> files;
243 HRESULT hr = async->GetResults(files.GetAddressOf()); 243 HRESULT hr = async->GetResults(files.GetAddressOf());
244 244
245 if (files) { 245 if (files) {
246 string16 result; 246 base::string16 result;
247 if (SUCCEEDED(hr)) 247 if (SUCCEEDED(hr))
248 hr = ComposeMultiFileResult(files.Get(), &result); 248 hr = ComposeMultiFileResult(files.Get(), &result);
249 249
250 if (SUCCEEDED(hr)) { 250 if (SUCCEEDED(hr)) {
251 if (result.size() + 1 < open_file_name_->nMaxFile) { 251 if (result.size() + 1 < open_file_name_->nMaxFile) {
252 // Because the result has embedded nulls, we must memcpy. 252 // Because the result has embedded nulls, we must memcpy.
253 memcpy(open_file_name_->lpstrFile, 253 memcpy(open_file_name_->lpstrFile,
254 result.c_str(), 254 result.c_str(),
255 (result.size() + 1) * sizeof(result[0])); 255 (result.size() + 1) * sizeof(result[0]));
256 success_ = true; 256 success_ = true;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 const wchar_t* walk = open_file_name_->lpstrFilter; 298 const wchar_t* walk = open_file_name_->lpstrFilter;
299 while (*walk != L'\0') { 299 while (*walk != L'\0') {
300 // Walk past the description. 300 // Walk past the description.
301 walk += wcslen(walk) + 1; 301 walk += wcslen(walk) + 1;
302 302
303 // We should have an extension, but bail on malformed filters. 303 // We should have an extension, but bail on malformed filters.
304 if (*walk == L'\0') 304 if (*walk == L'\0')
305 break; 305 break;
306 306
307 // There can be a single extension, or a list of semicolon-separated ones. 307 // There can be a single extension, or a list of semicolon-separated ones.
308 std::vector<string16> extensions_win32_style; 308 std::vector<base::string16> extensions_win32_style;
309 size_t extension_count = Tokenize(walk, L";", &extensions_win32_style); 309 size_t extension_count = Tokenize(walk, L";", &extensions_win32_style);
310 DCHECK_EQ(extension_count, extensions_win32_style.size()); 310 DCHECK_EQ(extension_count, extensions_win32_style.size());
311 311
312 // Metro wants suffixes only, not patterns. 312 // Metro wants suffixes only, not patterns.
313 mswrw::HString extension; 313 mswrw::HString extension;
314 for (size_t i = 0; i < extensions_win32_style.size(); ++i) { 314 for (size_t i = 0; i < extensions_win32_style.size(); ++i) {
315 if (extensions_win32_style[i] == L"*.*") { 315 if (extensions_win32_style[i] == L"*.*") {
316 // The wildcard filter is "*" for Metro. The string "*.*" produces 316 // The wildcard filter is "*" for Metro. The string "*.*" produces
317 // an "invalid parameter" error. 317 // an "invalid parameter" error.
318 hr = extension.Set(L"*"); 318 hr = extension.Set(L"*");
319 } else { 319 } else {
320 // Metro wants suffixes only, not patterns. 320 // Metro wants suffixes only, not patterns.
321 string16 ext = base::FilePath(extensions_win32_style[i]).Extension(); 321 base::string16 ext =
322 base::FilePath(extensions_win32_style[i]).Extension();
322 if ((ext.size() < 2) || 323 if ((ext.size() < 2) ||
323 (ext.find_first_of(L"*?") != string16::npos)) { 324 (ext.find_first_of(L"*?") != base::string16::npos)) {
324 continue; 325 continue;
325 } 326 }
326 hr = extension.Set(ext.c_str()); 327 hr = extension.Set(ext.c_str());
327 } 328 }
328 if (SUCCEEDED(hr)) 329 if (SUCCEEDED(hr))
329 hr = filter->Append(extension.Get()); 330 hr = filter->Append(extension.Get());
330 if (FAILED(hr)) 331 if (FAILED(hr))
331 return hr; 332 return hr;
332 } 333 }
333 334
(...skipping 30 matching lines...) Expand all
364 mswr::ComPtr<HandlerDoneType> handler(mswr::Callback<HandlerDoneType>( 365 mswr::ComPtr<HandlerDoneType> handler(mswr::Callback<HandlerDoneType>(
365 this, &OpenFilePickerSession::SinglePickerDone)); 366 this, &OpenFilePickerSession::SinglePickerDone));
366 DCHECK(handler.Get() != NULL); 367 DCHECK(handler.Get() != NULL);
367 hr = completion->put_Completed(handler.Get()); 368 hr = completion->put_Completed(handler.Get());
368 369
369 return hr; 370 return hr;
370 } 371 }
371 } 372 }
372 373
373 HRESULT OpenFilePickerSession::ComposeMultiFileResult( 374 HRESULT OpenFilePickerSession::ComposeMultiFileResult(
374 StorageFileVectorCollection* files, string16* result) { 375 StorageFileVectorCollection* files, base::string16* result) {
375 DCHECK(files != NULL); 376 DCHECK(files != NULL);
376 DCHECK(result != NULL); 377 DCHECK(result != NULL);
377 378
378 // Empty the output string. 379 // Empty the output string.
379 result->clear(); 380 result->clear();
380 381
381 unsigned int num_files = 0; 382 unsigned int num_files = 0;
382 HRESULT hr = files->get_Size(&num_files); 383 HRESULT hr = files->get_Size(&num_files);
383 if (FAILED(hr)) 384 if (FAILED(hr))
384 return hr; 385 return hr;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 return hr; 469 return hr;
469 470
470 // Walk past the description. 471 // Walk past the description.
471 walk += wcslen(walk) + 1; 472 walk += wcslen(walk) + 1;
472 473
473 // We should have an extension, but bail on malformed filters. 474 // We should have an extension, but bail on malformed filters.
474 if (*walk == L'\0') 475 if (*walk == L'\0')
475 break; 476 break;
476 477
477 // There can be a single extension, or a list of semicolon-separated ones. 478 // There can be a single extension, or a list of semicolon-separated ones.
478 std::vector<string16> extensions_win32_style; 479 std::vector<base::string16> extensions_win32_style;
479 size_t extension_count = Tokenize(walk, L";", &extensions_win32_style); 480 size_t extension_count = Tokenize(walk, L";", &extensions_win32_style);
480 DCHECK_EQ(extension_count, extensions_win32_style.size()); 481 DCHECK_EQ(extension_count, extensions_win32_style.size());
481 482
482 // Metro wants suffixes only, not patterns. Also, metro does not support 483 // Metro wants suffixes only, not patterns. Also, metro does not support
483 // the all files ("*") pattern in the save picker. 484 // the all files ("*") pattern in the save picker.
484 std::vector<string16> extensions; 485 std::vector<base::string16> extensions;
485 for (size_t i = 0; i < extensions_win32_style.size(); ++i) { 486 for (size_t i = 0; i < extensions_win32_style.size(); ++i) {
486 string16 ext = base::FilePath(extensions_win32_style[i]).Extension(); 487 base::string16 ext =
488 base::FilePath(extensions_win32_style[i]).Extension();
487 if ((ext.size() < 2) || 489 if ((ext.size() < 2) ||
488 (ext.find_first_of(L"*?") != string16::npos)) 490 (ext.find_first_of(L"*?") != base::string16::npos))
489 continue; 491 continue;
490 extensions.push_back(ext); 492 extensions.push_back(ext);
491 } 493 }
492 494
493 if (!extensions.empty()) { 495 if (!extensions.empty()) {
494 // Convert to a Metro collection class. 496 // Convert to a Metro collection class.
495 mswr::ComPtr<StringVectorItf> list; 497 mswr::ComPtr<StringVectorItf> list;
496 hr = mswr::MakeAndInitialize<StringVectorImpl>( 498 hr = mswr::MakeAndInitialize<StringVectorImpl>(
497 list.GetAddressOf(), extensions); 499 list.GetAddressOf(), extensions);
498 if (FAILED(hr)) 500 if (FAILED(hr))
(...skipping 24 matching lines...) Expand all
523 // TODO(grt): Get a properly translated string. This can't be done from 525 // TODO(grt): Get a properly translated string. This can't be done from
524 // within metro_driver. Consider preprocessing the filter list in Chrome 526 // within metro_driver. Consider preprocessing the filter list in Chrome
525 // land to ensure it has this entry if all others are patterns. In that 527 // land to ensure it has this entry if all others are patterns. In that
526 // case, this whole block of code can be removed. 528 // case, this whole block of code can be removed.
527 hr = description.Set(L"Data File"); 529 hr = description.Set(L"Data File");
528 if (FAILED(hr)) 530 if (FAILED(hr))
529 return hr; 531 return hr;
530 532
531 mswr::ComPtr<StringVectorItf> list; 533 mswr::ComPtr<StringVectorItf> list;
532 hr = mswr::MakeAndInitialize<StringVectorImpl>( 534 hr = mswr::MakeAndInitialize<StringVectorImpl>(
533 list.GetAddressOf(), std::vector<string16>(1, L".dat")); 535 list.GetAddressOf(), std::vector<base::string16>(1, L".dat"));
534 if (FAILED(hr)) 536 if (FAILED(hr))
535 return hr; 537 return hr;
536 538
537 boolean replaced = FALSE; 539 boolean replaced = FALSE;
538 hr = choices->Insert(description.Get(), list.Get(), &replaced); 540 hr = choices->Insert(description.Get(), list.Get(), &replaced);
539 if (FAILED(hr)) 541 if (FAILED(hr))
540 return hr; 542 return hr;
541 DCHECK_EQ(FALSE, replaced); 543 DCHECK_EQ(FALSE, replaced);
542 } 544 }
543 545
(...skipping 30 matching lines...) Expand all
574 if (file) { 576 if (file) {
575 mswr::ComPtr<winstorage::IStorageItem> storage_item; 577 mswr::ComPtr<winstorage::IStorageItem> storage_item;
576 if (SUCCEEDED(hr)) 578 if (SUCCEEDED(hr))
577 hr = file.As(&storage_item); 579 hr = file.As(&storage_item);
578 580
579 mswrw::HString file_path; 581 mswrw::HString file_path;
580 if (SUCCEEDED(hr)) 582 if (SUCCEEDED(hr))
581 hr = storage_item->get_Path(file_path.GetAddressOf()); 583 hr = storage_item->get_Path(file_path.GetAddressOf());
582 584
583 if (SUCCEEDED(hr)) { 585 if (SUCCEEDED(hr)) {
584 string16 path_str = MakeStdWString(file_path.Get()); 586 base::string16 path_str = MakeStdWString(file_path.Get());
585 587
586 // If the selected file name is longer than the supplied buffer, 588 // If the selected file name is longer than the supplied buffer,
587 // we return false as per GetOpenFileName documentation. 589 // we return false as per GetOpenFileName documentation.
588 if (path_str.size() < open_file_name_->nMaxFile) { 590 if (path_str.size() < open_file_name_->nMaxFile) {
589 base::wcslcpy(open_file_name_->lpstrFile, 591 base::wcslcpy(open_file_name_->lpstrFile,
590 path_str.c_str(), 592 path_str.c_str(),
591 open_file_name_->nMaxFile); 593 open_file_name_->nMaxFile);
592 success_ = true; 594 success_ = true;
593 } 595 }
594 } 596 }
(...skipping 15 matching lines...) Expand all
610 OpenFilePickerSession session(open_file_name); 612 OpenFilePickerSession session(open_file_name);
611 613
612 return session.Run(); 614 return session.Run();
613 } 615 }
614 616
615 BOOL MetroGetSaveFileName(OPENFILENAME* open_file_name) { 617 BOOL MetroGetSaveFileName(OPENFILENAME* open_file_name) {
616 SaveFilePickerSession session(open_file_name); 618 SaveFilePickerSession session(open_file_name);
617 619
618 return session.Run(); 620 return session.Run();
619 } 621 }
OLDNEW
« no previous file with comments | « win8/metro_driver/chrome_url_launch_handler.cc ('k') | win8/metro_driver/file_picker_ash.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698