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

Unified Diff: chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc

Issue 284223004: List cloud devices in chrome://devices page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
index 4f3c2477dedc4fd0d620e5fa4a1d76a3a7b1ca21..aee7a8f37d05ba07c79d749d0d9d134cc2bdfe48 100644
--- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
+++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
@@ -29,6 +29,7 @@
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
+#include "components/cloud_devices/common/cloud_devices_switches.h"
#include "components/cloud_devices/common/cloud_devices_urls.h"
#include "components/signin/core/browser/profile_oauth2_token_service.h"
#include "components/signin/core/browser/signin_manager_base.h"
@@ -49,11 +50,44 @@
namespace local_discovery {
namespace {
-const char kDeviceTypePrinter[] = "printer";
+
int g_num_visible = 0;
+
+scoped_ptr<base::DictionaryValue> CreateDeviceInfo(
+ const CloudDeviceListDelegate::Device& description) {
+ scoped_ptr<base::DictionaryValue> return_value(new base::DictionaryValue);
+
+ return_value->SetString("id", description.id);
+ return_value->SetString("display_name", description.display_name);
+ return_value->SetString("description", description.description);
+ return_value->SetString("type", description.type);
+
+ return return_value.Pass();
+}
+
+void ReadDevicesList(
+ const std::vector<CloudDeviceListDelegate::Device>& devices,
+ const std::set<std::string>& local_ids,
+ base::ListValue* devices_list) {
+ for (CloudDeviceList::iterator i = devices.begin(); i != devices.end(); i++) {
+ if (local_ids.count(i->id) > 0) {
+ devices_list->Append(CreateDeviceInfo(*i).release());
+ }
+ }
+
+ for (CloudDeviceList::iterator i = devices.begin(); i != devices.end(); i++) {
+ if (local_ids.count(i->id) == 0) {
+ devices_list->Append(CreateDeviceInfo(*i).release());
+ }
+ }
+}
+
} // namespace
-LocalDiscoveryUIHandler::LocalDiscoveryUIHandler() : is_visible_(false) {
+LocalDiscoveryUIHandler::LocalDiscoveryUIHandler()
+ : is_visible_(false),
+ failed_list_count_(0),
+ succeded_list_count_(0) {
#if defined(CLOUD_PRINT_CONNECTOR_UI_AVAILABLE)
#if !defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN)
// On Windows, we need the PDF plugin which is only guaranteed to exist on
@@ -98,9 +132,10 @@ void LocalDiscoveryUIHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback("cancelRegistration", base::Bind(
&LocalDiscoveryUIHandler::HandleCancelRegistration,
base::Unretained(this)));
- web_ui()->RegisterMessageCallback("requestPrinterList", base::Bind(
- &LocalDiscoveryUIHandler::HandleRequestPrinterList,
- base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "requestDeviceList",
+ base::Bind(&LocalDiscoveryUIHandler::HandleRequestDeviceList,
+ base::Unretained(this)));
web_ui()->RegisterMessageCallback("openCloudPrintURL", base::Bind(
&LocalDiscoveryUIHandler::HandleOpenCloudPrintURL,
base::Unretained(this)));
@@ -179,7 +214,7 @@ void LocalDiscoveryUIHandler::HandleCancelRegistration(
ResetCurrentRegistration();
}
-void LocalDiscoveryUIHandler::HandleRequestPrinterList(
+void LocalDiscoveryUIHandler::HandleRequestDeviceList(
const base::ListValue* args) {
Profile* profile = Profile::FromWebUI(web_ui());
ProfileOAuth2TokenService* token_service =
@@ -188,12 +223,26 @@ void LocalDiscoveryUIHandler::HandleRequestPrinterList(
SigninManagerBase* signin_manager =
SigninManagerFactory::GetInstance()->GetForProfile(profile);
+ failed_list_count_ = 0;
+ succeded_list_count_ = 0;
+
cloud_print_printer_list_.reset(
new CloudPrintPrinterList(profile->GetRequestContext(),
token_service,
signin_manager->GetAuthenticatedAccountId(),
this));
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableCloudDevices)) {
+ cloud_device_list_.reset(
+ new CloudDeviceList(profile->GetRequestContext(),
+ token_service,
+ signin_manager->GetAuthenticatedAccountId(),
+ this));
+ }
+
cloud_print_printer_list_->Start();
+ if (cloud_device_list_)
+ cloud_device_list_->Start();
}
void LocalDiscoveryUIHandler::HandleOpenCloudPrintURL(
@@ -382,39 +431,14 @@ void LocalDiscoveryUIHandler::DeviceCacheFlushed() {
privet_lister_->DiscoverNewDevices(false);
}
-void LocalDiscoveryUIHandler::OnCloudPrintPrinterListReady() {
- base::ListValue printer_object_list;
- std::set<std::string> local_ids;
-
- for (DeviceDescriptionMap::iterator i = device_descriptions_.begin();
- i != device_descriptions_.end();
- i++) {
- std::string device_id = i->second.id;
- if (!device_id.empty()) {
- const CloudPrintPrinterList::PrinterDetails* details =
- cloud_print_printer_list_->GetDetailsFor(device_id);
-
- if (details) {
- local_ids.insert(device_id);
- printer_object_list.Append(CreatePrinterInfo(*details).release());
- }
- }
- }
-
- for (CloudPrintPrinterList::iterator i = cloud_print_printer_list_->begin();
- i != cloud_print_printer_list_->end(); i++) {
- if (local_ids.count(i->id) == 0) {
- printer_object_list.Append(CreatePrinterInfo(*i).release());
- }
- }
-
- web_ui()->CallJavascriptFunction(
- "local_discovery.onCloudDeviceListAvailable", printer_object_list);
+void LocalDiscoveryUIHandler::OnDeviceListReady() {
+ ++succeded_list_count_;
+ CheckListingDone();
}
-void LocalDiscoveryUIHandler::OnCloudPrintPrinterListUnavailable() {
- web_ui()->CallJavascriptFunction(
- "local_discovery.onCloudDeviceListUnavailable");
+void LocalDiscoveryUIHandler::OnDeviceListUnavailable() {
+ ++failed_list_count_;
+ CheckListingDone();
}
void LocalDiscoveryUIHandler::GoogleSigninSucceeded(
@@ -475,24 +499,51 @@ void LocalDiscoveryUIHandler::ResetCurrentRegistration() {
current_http_client_.reset();
}
-scoped_ptr<base::DictionaryValue> LocalDiscoveryUIHandler::CreatePrinterInfo(
- const CloudPrintPrinterList::PrinterDetails& description) {
- scoped_ptr<base::DictionaryValue> return_value(new base::DictionaryValue);
-
- return_value->SetString("id", description.id);
- return_value->SetString("display_name", description.display_name);
- return_value->SetString("description", description.description);
- return_value->SetString("type", "printer");
-
- return return_value.Pass();
-}
-
void LocalDiscoveryUIHandler::CheckUserLoggedIn() {
base::FundamentalValue logged_in_value(!GetSyncAccount().empty());
web_ui()->CallJavascriptFunction("local_discovery.setUserLoggedIn",
logged_in_value);
}
+void LocalDiscoveryUIHandler::CheckListingDone() {
+ int started = 0;
+ if (cloud_print_printer_list_)
+ ++started;
+ if (cloud_device_list_)
+ ++started;
+
+ if (started > failed_list_count_ + succeded_list_count_)
+ return;
+
+ if (succeded_list_count_ <= 0) {
+ web_ui()->CallJavascriptFunction(
+ "local_discovery.onCloudDeviceListUnavailable");
+ return;
+ }
+
+ base::ListValue devices_list;
+ std::set<std::string> local_ids;
+
+ for (DeviceDescriptionMap::iterator i = device_descriptions_.begin();
+ i != device_descriptions_.end(); i++) {
+ local_ids.insert(i->second.id);
+ }
+
+ if (cloud_print_printer_list_) {
+ ReadDevicesList(cloud_print_printer_list_->printer_list(), local_ids,
+ &devices_list);
+ }
+ if (cloud_device_list_) {
+ ReadDevicesList(cloud_device_list_->device_list(), local_ids,
+ &devices_list);
+ }
+
+ web_ui()->CallJavascriptFunction(
+ "local_discovery.onCloudDeviceListAvailable", devices_list);
+ cloud_print_printer_list_.reset();
+ cloud_device_list_.reset();
+}
+
#if defined(CLOUD_PRINT_CONNECTOR_UI_AVAILABLE)
void LocalDiscoveryUIHandler::StartCloudPrintConnector() {
Profile* profile = Profile::FromWebUI(web_ui());
« no previous file with comments | « chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698