| Index: chrome/browser/chromeos/drive/file_system/search_operation.cc
|
| diff --git a/chrome/browser/chromeos/drive/file_system/search_operation.cc b/chrome/browser/chromeos/drive/file_system/search_operation.cc
|
| deleted file mode 100644
|
| index 68f96184eec5b634c2c481c48d84de63541a13d0..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/drive/file_system/search_operation.cc
|
| +++ /dev/null
|
| @@ -1,180 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/chromeos/drive/file_system/search_operation.h"
|
| -
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/callback.h"
|
| -#include "base/task_runner_util.h"
|
| -#include "chrome/browser/chromeos/drive/change_list_loader.h"
|
| -#include "chrome/browser/chromeos/drive/file_system_core_util.h"
|
| -#include "chrome/browser/chromeos/drive/job_scheduler.h"
|
| -#include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
|
| -#include "chrome/browser/chromeos/drive/resource_metadata.h"
|
| -#include "components/drive/drive_api_util.h"
|
| -#include "google_apis/drive/drive_api_parser.h"
|
| -#include "url/gurl.h"
|
| -
|
| -namespace drive {
|
| -namespace file_system {
|
| -namespace {
|
| -
|
| -// Computes the path of each item in |file_list| returned from the server
|
| -// and stores to |result|, by using |resource_metadata|. If the metadata is not
|
| -// up-to-date and did not contain an item, adds the item to "drive/other" for
|
| -// temporally assigning a path.
|
| -FileError ResolveSearchResultOnBlockingPool(
|
| - internal::ResourceMetadata* resource_metadata,
|
| - scoped_ptr<google_apis::FileList> file_list,
|
| - std::vector<SearchResultInfo>* result) {
|
| - DCHECK(resource_metadata);
|
| - DCHECK(result);
|
| -
|
| - const ScopedVector<google_apis::FileResource>& entries = file_list->items();
|
| - result->reserve(entries.size());
|
| - for (size_t i = 0; i < entries.size(); ++i) {
|
| - std::string local_id;
|
| - FileError error = resource_metadata->GetIdByResourceId(
|
| - entries[i]->file_id(), &local_id);
|
| -
|
| - ResourceEntry entry;
|
| - if (error == FILE_ERROR_OK)
|
| - error = resource_metadata->GetResourceEntryById(local_id, &entry);
|
| -
|
| - if (error == FILE_ERROR_NOT_FOUND) {
|
| - std::string original_parent_id;
|
| - if (!ConvertFileResourceToResourceEntry(*entries[i], &entry,
|
| - &original_parent_id))
|
| - continue; // Skip non-file entries.
|
| -
|
| - // The result is absent in local resource metadata. This can happen if
|
| - // the metadata is not synced to the latest server state yet. In that
|
| - // case, we temporarily add the file to the special "drive/other"
|
| - // directory in order to assign a path, which is needed to access the
|
| - // file through FileSystem API.
|
| - //
|
| - // It will be moved to the right place when the metadata gets synced
|
| - // in normal loading process in ChangeListProcessor.
|
| - entry.set_parent_local_id(util::kDriveOtherDirLocalId);
|
| - error = resource_metadata->AddEntry(entry, &local_id);
|
| - }
|
| - if (error != FILE_ERROR_OK)
|
| - return error;
|
| - base::FilePath path;
|
| - error = resource_metadata->GetFilePath(local_id, &path);
|
| - if (error != FILE_ERROR_OK)
|
| - return error;
|
| - result->push_back(SearchResultInfo(path, entry.file_info().is_directory()));
|
| - }
|
| -
|
| - return FILE_ERROR_OK;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -SearchOperation::SearchOperation(
|
| - base::SequencedTaskRunner* blocking_task_runner,
|
| - JobScheduler* scheduler,
|
| - internal::ResourceMetadata* metadata,
|
| - internal::LoaderController* loader_controller)
|
| - : blocking_task_runner_(blocking_task_runner),
|
| - scheduler_(scheduler),
|
| - metadata_(metadata),
|
| - loader_controller_(loader_controller),
|
| - weak_ptr_factory_(this) {
|
| -}
|
| -
|
| -SearchOperation::~SearchOperation() {
|
| -}
|
| -
|
| -void SearchOperation::Search(const std::string& search_query,
|
| - const GURL& next_link,
|
| - const SearchCallback& callback) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(!callback.is_null());
|
| -
|
| - if (next_link.is_empty()) {
|
| - // This is first request for the |search_query|.
|
| - scheduler_->Search(
|
| - search_query,
|
| - base::Bind(&SearchOperation::SearchAfterGetFileList,
|
| - weak_ptr_factory_.GetWeakPtr(), callback));
|
| - } else {
|
| - // There is the remaining result so fetch it.
|
| - scheduler_->GetRemainingFileList(
|
| - next_link,
|
| - base::Bind(&SearchOperation::SearchAfterGetFileList,
|
| - weak_ptr_factory_.GetWeakPtr(), callback));
|
| - }
|
| -}
|
| -
|
| -void SearchOperation::SearchAfterGetFileList(
|
| - const SearchCallback& callback,
|
| - google_apis::DriveApiErrorCode gdata_error,
|
| - scoped_ptr<google_apis::FileList> file_list) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(!callback.is_null());
|
| -
|
| - FileError error = GDataToFileError(gdata_error);
|
| - if (error != FILE_ERROR_OK) {
|
| - callback.Run(error, GURL(), scoped_ptr<std::vector<SearchResultInfo> >());
|
| - return;
|
| - }
|
| -
|
| - DCHECK(file_list);
|
| -
|
| - GURL next_url = file_list->next_link();
|
| -
|
| - scoped_ptr<std::vector<SearchResultInfo> > result(
|
| - new std::vector<SearchResultInfo>);
|
| - if (file_list->items().empty()) {
|
| - // Short cut. If the resource entry is empty, we don't need to refresh
|
| - // the resource metadata.
|
| - callback.Run(FILE_ERROR_OK, next_url, result.Pass());
|
| - return;
|
| - }
|
| -
|
| - // ResolveSearchResultOnBlockingPool() may add entries newly created on the
|
| - // server to the local metadata.
|
| - // This may race with sync tasks so we should ask LoaderController here.
|
| - std::vector<SearchResultInfo>* result_ptr = result.get();
|
| - loader_controller_->ScheduleRun(base::Bind(
|
| - base::IgnoreResult(
|
| - &base::PostTaskAndReplyWithResult<FileError, FileError>),
|
| - blocking_task_runner_,
|
| - FROM_HERE,
|
| - base::Bind(&ResolveSearchResultOnBlockingPool,
|
| - metadata_,
|
| - base::Passed(&file_list),
|
| - result_ptr),
|
| - base::Bind(&SearchOperation::SearchAfterResolveSearchResult,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - callback,
|
| - next_url,
|
| - base::Passed(&result))));
|
| -}
|
| -
|
| -void SearchOperation::SearchAfterResolveSearchResult(
|
| - const SearchCallback& callback,
|
| - const GURL& next_link,
|
| - scoped_ptr<std::vector<SearchResultInfo> > result,
|
| - FileError error) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(!callback.is_null());
|
| - DCHECK(result);
|
| -
|
| - if (error != FILE_ERROR_OK) {
|
| - callback.Run(error, GURL(), scoped_ptr<std::vector<SearchResultInfo> >());
|
| - return;
|
| - }
|
| -
|
| - callback.Run(error, next_link, result.Pass());
|
| -}
|
| -
|
| -} // namespace file_system
|
| -} // namespace drive
|
|
|