| 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/chromeos/drive/file_system/search_operation.h" | 5 #include "chrome/browser/chromeos/drive/file_system/search_operation.h" | 
| 6 | 6 | 
| 7 #include <string> | 7 #include <string> | 
| 8 #include <vector> | 8 #include <vector> | 
| 9 | 9 | 
| 10 #include "base/bind.h" | 10 #include "base/bind.h" | 
| 11 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" | 
| 12 #include "base/callback.h" | 12 #include "base/callback.h" | 
| 13 #include "base/task_runner_util.h" | 13 #include "base/task_runner_util.h" | 
|  | 14 #include "chrome/browser/chromeos/drive/change_list_loader.h" | 
| 14 #include "chrome/browser/chromeos/drive/file_system_util.h" | 15 #include "chrome/browser/chromeos/drive/file_system_util.h" | 
| 15 #include "chrome/browser/chromeos/drive/job_scheduler.h" | 16 #include "chrome/browser/chromeos/drive/job_scheduler.h" | 
| 16 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h" | 17 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h" | 
| 17 #include "chrome/browser/chromeos/drive/resource_metadata.h" | 18 #include "chrome/browser/chromeos/drive/resource_metadata.h" | 
| 18 #include "content/public/browser/browser_thread.h" | 19 #include "content/public/browser/browser_thread.h" | 
| 19 #include "google_apis/drive/gdata_wapi_parser.h" | 20 #include "google_apis/drive/gdata_wapi_parser.h" | 
| 20 #include "url/gurl.h" | 21 #include "url/gurl.h" | 
| 21 | 22 | 
| 22 using content::BrowserThread; | 23 using content::BrowserThread; | 
| 23 | 24 | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 72   } | 73   } | 
| 73 | 74 | 
| 74   return FILE_ERROR_OK; | 75   return FILE_ERROR_OK; | 
| 75 } | 76 } | 
| 76 | 77 | 
| 77 }  // namespace | 78 }  // namespace | 
| 78 | 79 | 
| 79 SearchOperation::SearchOperation( | 80 SearchOperation::SearchOperation( | 
| 80     base::SequencedTaskRunner* blocking_task_runner, | 81     base::SequencedTaskRunner* blocking_task_runner, | 
| 81     JobScheduler* scheduler, | 82     JobScheduler* scheduler, | 
| 82     internal::ResourceMetadata* metadata) | 83     internal::ResourceMetadata* metadata, | 
|  | 84     internal::LoaderController* loader_controller) | 
| 83     : blocking_task_runner_(blocking_task_runner), | 85     : blocking_task_runner_(blocking_task_runner), | 
| 84       scheduler_(scheduler), | 86       scheduler_(scheduler), | 
| 85       metadata_(metadata), | 87       metadata_(metadata), | 
|  | 88       loader_controller_(loader_controller), | 
| 86       weak_ptr_factory_(this) { | 89       weak_ptr_factory_(this) { | 
| 87 } | 90 } | 
| 88 | 91 | 
| 89 SearchOperation::~SearchOperation() { | 92 SearchOperation::~SearchOperation() { | 
| 90 } | 93 } | 
| 91 | 94 | 
| 92 void SearchOperation::Search(const std::string& search_query, | 95 void SearchOperation::Search(const std::string& search_query, | 
| 93                              const GURL& next_link, | 96                              const GURL& next_link, | 
| 94                              const SearchCallback& callback) { | 97                              const SearchCallback& callback) { | 
| 95   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 98   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 130 | 133 | 
| 131   scoped_ptr<std::vector<SearchResultInfo> > result( | 134   scoped_ptr<std::vector<SearchResultInfo> > result( | 
| 132       new std::vector<SearchResultInfo>); | 135       new std::vector<SearchResultInfo>); | 
| 133   if (resource_list->entries().empty()) { | 136   if (resource_list->entries().empty()) { | 
| 134     // Short cut. If the resource entry is empty, we don't need to refresh | 137     // Short cut. If the resource entry is empty, we don't need to refresh | 
| 135     // the resource metadata. | 138     // the resource metadata. | 
| 136     callback.Run(FILE_ERROR_OK, next_url, result.Pass()); | 139     callback.Run(FILE_ERROR_OK, next_url, result.Pass()); | 
| 137     return; | 140     return; | 
| 138   } | 141   } | 
| 139 | 142 | 
|  | 143   // ResolveSearchResultOnBlockingPool() may add entries newly created on the | 
|  | 144   // server to the local metadata. | 
|  | 145   // This may race with sync tasks so we should ask LoaderController here. | 
| 140   std::vector<SearchResultInfo>* result_ptr = result.get(); | 146   std::vector<SearchResultInfo>* result_ptr = result.get(); | 
| 141   base::PostTaskAndReplyWithResult( | 147   loader_controller_->ScheduleRun(base::Bind( | 
| 142       blocking_task_runner_.get(), | 148       base::IgnoreResult( | 
|  | 149           &base::PostTaskAndReplyWithResult<FileError, FileError>), | 
|  | 150       blocking_task_runner_, | 
| 143       FROM_HERE, | 151       FROM_HERE, | 
| 144       base::Bind(&ResolveSearchResultOnBlockingPool, | 152       base::Bind(&ResolveSearchResultOnBlockingPool, | 
| 145                  metadata_, | 153                  metadata_, | 
| 146                  base::Passed(&resource_list), | 154                  base::Passed(&resource_list), | 
| 147                  result_ptr), | 155                  result_ptr), | 
| 148       base::Bind(&SearchOperation::SearchAfterResolveSearchResult, | 156       base::Bind(&SearchOperation::SearchAfterResolveSearchResult, | 
| 149                  weak_ptr_factory_.GetWeakPtr(), | 157                  weak_ptr_factory_.GetWeakPtr(), | 
| 150                  callback, | 158                  callback, | 
| 151                  next_url, | 159                  next_url, | 
| 152                  base::Passed(&result))); | 160                  base::Passed(&result)))); | 
| 153 } | 161 } | 
| 154 | 162 | 
| 155 void SearchOperation::SearchAfterResolveSearchResult( | 163 void SearchOperation::SearchAfterResolveSearchResult( | 
| 156     const SearchCallback& callback, | 164     const SearchCallback& callback, | 
| 157     const GURL& next_link, | 165     const GURL& next_link, | 
| 158     scoped_ptr<std::vector<SearchResultInfo> > result, | 166     scoped_ptr<std::vector<SearchResultInfo> > result, | 
| 159     FileError error) { | 167     FileError error) { | 
| 160   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 168   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 
| 161   DCHECK(!callback.is_null()); | 169   DCHECK(!callback.is_null()); | 
| 162   DCHECK(result); | 170   DCHECK(result); | 
| 163 | 171 | 
| 164   if (error != FILE_ERROR_OK) { | 172   if (error != FILE_ERROR_OK) { | 
| 165     callback.Run(error, GURL(), scoped_ptr<std::vector<SearchResultInfo> >()); | 173     callback.Run(error, GURL(), scoped_ptr<std::vector<SearchResultInfo> >()); | 
| 166     return; | 174     return; | 
| 167   } | 175   } | 
| 168 | 176 | 
| 169   callback.Run(error, next_link, result.Pass()); | 177   callback.Run(error, next_link, result.Pass()); | 
| 170 } | 178 } | 
| 171 | 179 | 
| 172 }  // namespace file_system | 180 }  // namespace file_system | 
| 173 }  // namespace drive | 181 }  // namespace drive | 
| OLD | NEW | 
|---|