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..0c1bde945398d968f0734a6c0cf0f9ccdaf03ba4 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 |
@@ -98,9 +98,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 +180,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 +189,22 @@ void LocalDiscoveryUIHandler::HandleRequestPrinterList( |
SigninManagerBase* signin_manager = |
SigninManagerFactory::GetInstance()->GetForProfile(profile); |
+ devices_list_.reset(); |
+ |
cloud_print_printer_list_.reset( |
new CloudPrintPrinterList(profile->GetRequestContext(), |
token_service, |
signin_manager->GetAuthenticatedAccountId(), |
this)); |
+ |
+ cloud_device_list_.reset( |
Noam Samuel
2014/05/16 21:13:26
IMPORTANT: Please hide behind flag for now.
Vitaly Buka (NO REVIEWS)
2014/05/17 17:15:37
Done.
|
+ new CloudDeviceList(profile->GetRequestContext(), |
+ token_service, |
+ signin_manager->GetAuthenticatedAccountId(), |
+ this)); |
+ |
cloud_print_printer_list_->Start(); |
+ cloud_device_list_->Start(); |
} |
void LocalDiscoveryUIHandler::HandleOpenCloudPrintURL( |
@@ -383,12 +394,12 @@ void LocalDiscoveryUIHandler::DeviceCacheFlushed() { |
} |
void LocalDiscoveryUIHandler::OnCloudPrintPrinterListReady() { |
- base::ListValue printer_object_list; |
+ if (!devices_list_) |
+ devices_list_.reset(new base::ListValue()); |
std::set<std::string> local_ids; |
for (DeviceDescriptionMap::iterator i = device_descriptions_.begin(); |
- i != device_descriptions_.end(); |
- i++) { |
+ i != device_descriptions_.end(); i++) { |
std::string device_id = i->second.id; |
if (!device_id.empty()) { |
const CloudPrintPrinterList::PrinterDetails* details = |
@@ -396,7 +407,7 @@ void LocalDiscoveryUIHandler::OnCloudPrintPrinterListReady() { |
if (details) { |
local_ids.insert(device_id); |
- printer_object_list.Append(CreatePrinterInfo(*details).release()); |
+ devices_list_->Append(CreatePrinterInfo(*details).release()); |
} |
} |
} |
@@ -404,17 +415,52 @@ void LocalDiscoveryUIHandler::OnCloudPrintPrinterListReady() { |
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()); |
+ devices_list_->Append(CreatePrinterInfo(*i).release()); |
} |
} |
- web_ui()->CallJavascriptFunction( |
- "local_discovery.onCloudDeviceListAvailable", printer_object_list); |
+ cloud_print_printer_list_.reset(); |
+ CheckListingDone(); |
} |
void LocalDiscoveryUIHandler::OnCloudPrintPrinterListUnavailable() { |
- web_ui()->CallJavascriptFunction( |
- "local_discovery.onCloudDeviceListUnavailable"); |
+ cloud_print_printer_list_.reset(); |
+ CheckListingDone(); |
+} |
+ |
+void LocalDiscoveryUIHandler::OnCloudDeviceListReady() { |
+ if (!devices_list_) |
+ devices_list_.reset(new base::ListValue()); |
+ 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 CloudDeviceList::DeviceDetails* details = |
+ cloud_device_list_->GetDetailsFor(device_id); |
+ |
+ if (details) { |
+ local_ids.insert(device_id); |
+ devices_list_->Append(CreateDeviceInfo(*details).release()); |
+ } |
+ } |
+ } |
+ |
+ for (CloudDeviceList::iterator i = cloud_device_list_->begin(); |
+ i != cloud_device_list_->end(); i++) { |
+ if (local_ids.count(i->id) == 0) { |
+ devices_list_->Append(CreateDeviceInfo(*i).release()); |
+ } |
+ } |
+ |
+ cloud_device_list_.reset(); |
+ CheckListingDone(); |
+} |
+ |
+void LocalDiscoveryUIHandler::OnCloudDeviceListUnavailable() { |
+ cloud_device_list_.reset(); |
+ CheckListingDone(); |
} |
void LocalDiscoveryUIHandler::GoogleSigninSucceeded( |
@@ -482,7 +528,19 @@ scoped_ptr<base::DictionaryValue> LocalDiscoveryUIHandler::CreatePrinterInfo( |
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_value->SetString("type", kDeviceTypePrinter); |
+ |
+ return return_value.Pass(); |
+} |
+ |
+scoped_ptr<base::DictionaryValue> LocalDiscoveryUIHandler::CreateDeviceInfo( |
+ const CloudDeviceList::DeviceDetails& 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(); |
} |
@@ -493,6 +551,19 @@ void LocalDiscoveryUIHandler::CheckUserLoggedIn() { |
logged_in_value); |
} |
+void LocalDiscoveryUIHandler::CheckListingDone() { |
+ if (cloud_print_printer_list_ || cloud_device_list_) |
+ return; |
+ if (devices_list_) { |
+ web_ui()->CallJavascriptFunction( |
+ "local_discovery.onCloudDeviceListAvailable", *devices_list_); |
+ devices_list_.reset(); |
+ } else { |
+ web_ui()->CallJavascriptFunction( |
+ "local_discovery.onCloudDeviceListUnavailable"); |
+ } |
+} |
+ |
#if defined(CLOUD_PRINT_CONNECTOR_UI_AVAILABLE) |
void LocalDiscoveryUIHandler::StartCloudPrintConnector() { |
Profile* profile = Profile::FromWebUI(web_ui()); |