OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "chrome/browser/devtools/devtools_file_system_indexer.h" | 5 #include "chrome/browser/devtools/devtools_file_system_indexer.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
11 #include "base/file_util.h" | 11 #include "base/file_util.h" |
12 #include "base/files/file_enumerator.h" | 12 #include "base/files/file_enumerator.h" |
13 #include "base/files/file_util_proxy.h" | 13 #include "base/files/file_util_proxy.h" |
14 #include "base/lazy_instance.h" | 14 #include "base/lazy_instance.h" |
15 #include "base/logging.h" | 15 #include "base/logging.h" |
16 #include "base/platform_file.h" | 16 #include "base/platform_file.h" |
17 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
18 #include "content/public/browser/browser_thread.h" | 18 #include "content/public/browser/browser_thread.h" |
19 | 19 |
20 using base::Bind; | 20 using base::Bind; |
21 using base::Callback; | 21 using base::Callback; |
22 using base::FileEnumerator; | 22 using base::FileEnumerator; |
23 using base::FilePath; | 23 using base::FilePath; |
24 using base::FileUtilProxy; | 24 using base::FileUtilProxy; |
25 using base::Time; | 25 using base::Time; |
26 using base::TimeDelta; | 26 using base::TimeDelta; |
27 using base::TimeTicks; | 27 using base::TimeTicks; |
28 using base::PassPlatformFile; | 28 using base::PassPlatformFile; |
29 using base::PlatformFile; | 29 using base::PlatformFile; |
30 using base::PlatformFileError; | |
31 using content::BrowserThread; | 30 using content::BrowserThread; |
32 using std::map; | 31 using std::map; |
33 using std::set; | 32 using std::set; |
34 using std::string; | 33 using std::string; |
35 using std::vector; | 34 using std::vector; |
36 | 35 |
37 namespace { | 36 namespace { |
38 | 37 |
39 typedef int32 Trigram; | 38 typedef int32 Trigram; |
40 typedef char TrigramChar; | 39 typedef char TrigramChar; |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 } | 338 } |
340 FilePath file_path = indexing_it_->first; | 339 FilePath file_path = indexing_it_->first; |
341 FileUtilProxy::CreateOrOpen( | 340 FileUtilProxy::CreateOrOpen( |
342 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), | 341 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), |
343 file_path, | 342 file_path, |
344 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, | 343 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, |
345 Bind(&FileSystemIndexingJob::StartFileIndexing, this)); | 344 Bind(&FileSystemIndexingJob::StartFileIndexing, this)); |
346 } | 345 } |
347 | 346 |
348 void DevToolsFileSystemIndexer::FileSystemIndexingJob::StartFileIndexing( | 347 void DevToolsFileSystemIndexer::FileSystemIndexingJob::StartFileIndexing( |
349 PlatformFileError error, | 348 base::File::Error error, |
350 PassPlatformFile pass_file, | 349 PassPlatformFile pass_file, |
351 bool) { | 350 bool) { |
352 if (error != base::PLATFORM_FILE_OK) { | 351 if (error != base::File::FILE_OK) { |
353 current_file_ = base::kInvalidPlatformFileValue; | 352 current_file_ = base::kInvalidPlatformFileValue; |
354 FinishFileIndexing(false); | 353 FinishFileIndexing(false); |
355 return; | 354 return; |
356 } | 355 } |
357 current_file_ = pass_file.ReleaseValue(); | 356 current_file_ = pass_file.ReleaseValue(); |
358 current_file_offset_ = 0; | 357 current_file_offset_ = 0; |
359 current_trigrams_.clear(); | 358 current_trigrams_.clear(); |
360 std::fill(current_trigrams_set_.begin(), current_trigrams_set_.end(), false); | 359 std::fill(current_trigrams_set_.begin(), current_trigrams_set_.end(), false); |
361 ReadFromFile(); | 360 ReadFromFile(); |
362 } | 361 } |
363 | 362 |
364 void DevToolsFileSystemIndexer::FileSystemIndexingJob::ReadFromFile() { | 363 void DevToolsFileSystemIndexer::FileSystemIndexingJob::ReadFromFile() { |
365 if (stopped_) { | 364 if (stopped_) { |
366 CloseFile(); | 365 CloseFile(); |
367 return; | 366 return; |
368 } | 367 } |
369 FileUtilProxy::Read( | 368 FileUtilProxy::Read( |
370 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), | 369 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), |
371 current_file_, | 370 current_file_, |
372 current_file_offset_, | 371 current_file_offset_, |
373 kMaxReadLength, | 372 kMaxReadLength, |
374 Bind(&FileSystemIndexingJob::OnRead, this)); | 373 Bind(&FileSystemIndexingJob::OnRead, this)); |
375 } | 374 } |
376 | 375 |
377 void DevToolsFileSystemIndexer::FileSystemIndexingJob::OnRead( | 376 void DevToolsFileSystemIndexer::FileSystemIndexingJob::OnRead( |
378 PlatformFileError error, | 377 base::File::Error error, |
379 const char* data, | 378 const char* data, |
380 int bytes_read) { | 379 int bytes_read) { |
381 if (error != base::PLATFORM_FILE_OK) { | 380 if (error != base::File::FILE_OK) { |
382 FinishFileIndexing(false); | 381 FinishFileIndexing(false); |
383 return; | 382 return; |
384 } | 383 } |
385 | 384 |
386 if (!bytes_read || bytes_read < 3) { | 385 if (!bytes_read || bytes_read < 3) { |
387 FinishFileIndexing(true); | 386 FinishFileIndexing(true); |
388 return; | 387 return; |
389 } | 388 } |
390 | 389 |
391 size_t size = static_cast<size_t>(bytes_read); | 390 size_t size = static_cast<size_t>(bytes_read); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 void DevToolsFileSystemIndexer::FileSystemIndexingJob::CloseFile() { | 427 void DevToolsFileSystemIndexer::FileSystemIndexingJob::CloseFile() { |
429 if (current_file_ != base::kInvalidPlatformFileValue) { | 428 if (current_file_ != base::kInvalidPlatformFileValue) { |
430 FileUtilProxy::Close( | 429 FileUtilProxy::Close( |
431 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), | 430 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), |
432 current_file_, | 431 current_file_, |
433 Bind(&FileSystemIndexingJob::CloseCallback, this)); | 432 Bind(&FileSystemIndexingJob::CloseCallback, this)); |
434 } | 433 } |
435 } | 434 } |
436 | 435 |
437 void DevToolsFileSystemIndexer::FileSystemIndexingJob::CloseCallback( | 436 void DevToolsFileSystemIndexer::FileSystemIndexingJob::CloseCallback( |
438 PlatformFileError error) {} | 437 base::File::Error error) {} |
439 | 438 |
440 void DevToolsFileSystemIndexer::FileSystemIndexingJob::ReportWorked() { | 439 void DevToolsFileSystemIndexer::FileSystemIndexingJob::ReportWorked() { |
441 TimeTicks current_time = TimeTicks::Now(); | 440 TimeTicks current_time = TimeTicks::Now(); |
442 bool should_send_worked_nitification = true; | 441 bool should_send_worked_nitification = true; |
443 if (!last_worked_notification_time_.is_null()) { | 442 if (!last_worked_notification_time_.is_null()) { |
444 TimeDelta delta = current_time - last_worked_notification_time_; | 443 TimeDelta delta = current_time - last_worked_notification_time_; |
445 if (delta.InMilliseconds() < kMinTimeoutBetweenWorkedNitification) | 444 if (delta.InMilliseconds() < kMinTimeoutBetweenWorkedNitification) |
446 should_send_worked_nitification = false; | 445 should_send_worked_nitification = false; |
447 } | 446 } |
448 ++files_indexed_; | 447 ++files_indexed_; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 vector<FilePath> file_paths = g_trigram_index.Get().Search(query); | 502 vector<FilePath> file_paths = g_trigram_index.Get().Search(query); |
504 vector<string> result; | 503 vector<string> result; |
505 FilePath path = FilePath::FromUTF8Unsafe(file_system_path); | 504 FilePath path = FilePath::FromUTF8Unsafe(file_system_path); |
506 vector<FilePath>::const_iterator it = file_paths.begin(); | 505 vector<FilePath>::const_iterator it = file_paths.begin(); |
507 for (; it != file_paths.end(); ++it) { | 506 for (; it != file_paths.end(); ++it) { |
508 if (path.IsParent(*it)) | 507 if (path.IsParent(*it)) |
509 result.push_back(it->AsUTF8Unsafe()); | 508 result.push_back(it->AsUTF8Unsafe()); |
510 } | 509 } |
511 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, Bind(callback, result)); | 510 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, Bind(callback, result)); |
512 } | 511 } |
OLD | NEW |