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

Side by Side Diff: chrome/browser/chromeos/drive/drive_app_registry.cc

Issue 127683002: Less dependency for DriveAppRegistry. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months 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
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 "chrome/browser/chromeos/drive/drive_app_registry.h" 5 #include "chrome/browser/chromeos/drive/drive_app_registry.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 #include <vector>
11 10
12 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
13 #include "base/strings/string_util.h" 12 #include "chrome/browser/drive/drive_service_interface.h"
14 #include "chrome/browser/chromeos/drive/file_system_util.h"
15 #include "chrome/browser/chromeos/drive/job_scheduler.h"
16 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
17 #include "google_apis/drive/drive_api_parser.h" 14 #include "google_apis/drive/drive_api_parser.h"
18 15
19 using content::BrowserThread; 16 using content::BrowserThread;
20 17
21 namespace { 18 namespace {
22 19
23 // Add {selector -> app_id} mapping to |map|. 20 // Add {selector -> app_id} mapping to |map|.
24 void AddAppSelectorList(const ScopedVector<std::string>& selectors, 21 void AddAppSelectorList(const ScopedVector<std::string>& selectors,
25 const std::string& app_id, 22 const std::string& app_id,
(...skipping 28 matching lines...) Expand all
54 : app_id(app_id), 51 : app_id(app_id),
55 app_icons(app_icons), 52 app_icons(app_icons),
56 document_icons(document_icons), 53 document_icons(document_icons),
57 app_name(app_name), 54 app_name(app_name),
58 create_url(create_url) { 55 create_url(create_url) {
59 } 56 }
60 57
61 DriveAppInfo::~DriveAppInfo() { 58 DriveAppInfo::~DriveAppInfo() {
62 } 59 }
63 60
64 DriveAppRegistry::DriveAppRegistry(JobScheduler* scheduler) 61 DriveAppRegistry::DriveAppRegistry(DriveServiceInterface* drive_service)
65 : scheduler_(scheduler), 62 : drive_service_(drive_service),
66 is_updating_(false), 63 is_updating_(false),
67 weak_ptr_factory_(this) { 64 weak_ptr_factory_(this) {
68 } 65 }
69 66
70 DriveAppRegistry::~DriveAppRegistry() { 67 DriveAppRegistry::~DriveAppRegistry() {
71 } 68 }
72 69
73 void DriveAppRegistry::GetAppsForFile( 70 void DriveAppRegistry::GetAppsForFile(
74 const base::FilePath::StringType& file_extension, 71 const base::FilePath::StringType& file_extension,
75 const std::string& mime_type, 72 const std::string& mime_type,
76 ScopedVector<DriveAppInfo>* apps) const { 73 std::vector<DriveAppInfo>* apps) const {
77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
78 75
79 std::vector<std::string> matched_apps; 76 std::vector<std::string> matched_apps;
80 if (!file_extension.empty()) { 77 if (!file_extension.empty()) {
81 const base::FilePath::StringType without_dot = file_extension.substr(1); 78 const base::FilePath::StringType without_dot = file_extension.substr(1);
82 FindAppsForSelector(without_dot, extension_map_, &matched_apps); 79 FindAppsForSelector(without_dot, extension_map_, &matched_apps);
83 } 80 }
84 if (!mime_type.empty()) 81 if (!mime_type.empty())
85 FindAppsForSelector(mime_type, mimetype_map_, &matched_apps); 82 FindAppsForSelector(mime_type, mimetype_map_, &matched_apps);
86 83
87 // Insert found Drive apps into |apps|, but skip duplicate results. 84 // Insert found Drive apps into |apps|, but skip duplicate results.
88 std::set<std::string> inserted_app_ids; 85 std::set<std::string> inserted_app_ids;
89 for (size_t i = 0; i < matched_apps.size(); ++i) { 86 for (size_t i = 0; i < matched_apps.size(); ++i) {
90 if (inserted_app_ids.count(matched_apps[i]) == 0) { 87 if (inserted_app_ids.count(matched_apps[i]) == 0) {
91 inserted_app_ids.insert(matched_apps[i]); 88 inserted_app_ids.insert(matched_apps[i]);
92 std::map<std::string, DriveAppInfo>::const_iterator it = 89 std::map<std::string, DriveAppInfo>::const_iterator it =
93 all_apps_.find(matched_apps[i]); 90 all_apps_.find(matched_apps[i]);
94 DCHECK(it != all_apps_.end()); 91 DCHECK(it != all_apps_.end());
95 apps->push_back(new DriveAppInfo(it->second)); 92 apps->push_back(it->second);
96 } 93 }
97 } 94 }
98 } 95 }
99 96
100 void DriveAppRegistry::Update() { 97 void DriveAppRegistry::Update() {
101 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 98 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
102 99
103 if (is_updating_) // There is already an update in progress. 100 if (is_updating_) // There is already an update in progress.
104 return; 101 return;
105 is_updating_ = true; 102 is_updating_ = true;
106 103
107 scheduler_->GetAppList(base::Bind(&DriveAppRegistry::UpdateAfterGetAppList, 104 drive_service_->GetAppList(
108 weak_ptr_factory_.GetWeakPtr())); 105 base::Bind(&DriveAppRegistry::UpdateAfterGetAppList,
106 weak_ptr_factory_.GetWeakPtr()));
109 } 107 }
110 108
111 void DriveAppRegistry::UpdateAfterGetAppList( 109 void DriveAppRegistry::UpdateAfterGetAppList(
112 google_apis::GDataErrorCode gdata_error, 110 google_apis::GDataErrorCode gdata_error,
113 scoped_ptr<google_apis::AppList> app_list) { 111 scoped_ptr<google_apis::AppList> app_list) {
114 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 112 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
115 113
116 DCHECK(is_updating_); 114 DCHECK(is_updating_);
117 is_updating_ = false; 115 is_updating_ = false;
118 116
119 FileError error = GDataToFileError(gdata_error); 117 // Failed to fetch the data from the server. We can do nothing here.
120 if (error != FILE_ERROR_OK) { 118 if (gdata_error != google_apis::HTTP_SUCCESS)
121 // Failed to fetch the data from the server. We can do nothing here.
122 return; 119 return;
123 }
124 120
125 DCHECK(app_list); 121 DCHECK(app_list);
126 UpdateFromAppList(*app_list); 122 UpdateFromAppList(*app_list);
127 } 123 }
128 124
129 void DriveAppRegistry::UpdateFromAppList(const google_apis::AppList& app_list) { 125 void DriveAppRegistry::UpdateFromAppList(const google_apis::AppList& app_list) {
130 all_apps_.clear(); 126 all_apps_.clear();
131 extension_map_.clear(); 127 extension_map_.clear();
132 mimetype_map_.clear(); 128 mimetype_map_.clear();
133 129
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 171
176 // Go forward while the size is larger or equal to preferred_size. 172 // Go forward while the size is larger or equal to preferred_size.
177 size_t i = 1; 173 size_t i = 1;
178 while (i < sorted_icons.size() && sorted_icons[i].first >= preferred_size) 174 while (i < sorted_icons.size() && sorted_icons[i].first >= preferred_size)
179 ++i; 175 ++i;
180 return sorted_icons[i - 1].second; 176 return sorted_icons[i - 1].second;
181 } 177 }
182 178
183 } // namespace util 179 } // namespace util
184 } // namespace drive 180 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/drive_app_registry.h ('k') | chrome/browser/chromeos/drive/drive_app_registry_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698