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

Unified Diff: chrome/browser/extensions/api/dial/dial_api.cc

Issue 2583853004: [chrome.dial] Adds chrome.dial.fetchDeviceDecription API. (Closed)
Patch Set: Rebase and fix typo. Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/api/dial/dial_api.h ('k') | chrome/browser/extensions/api/dial/dial_apitest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/api/dial/dial_api.cc
diff --git a/chrome/browser/extensions/api/dial/dial_api.cc b/chrome/browser/extensions/api/dial/dial_api.cc
index 7946ca280d91af8e83cea677b992a7d393690e55..6099c0277d891a24400da675b77269a342d7dfe3 100644
--- a/chrome/browser/extensions/api/dial/dial_api.cc
+++ b/chrome/browser/extensions/api/dial/dial_api.cc
@@ -8,18 +8,23 @@
#include <utility>
#include <vector>
+#include "base/bind.h"
#include "base/memory/ptr_util.h"
#include "base/time/time.h"
+#include "chrome/browser/extensions/api/dial/device_description_fetcher.h"
#include "chrome/browser/extensions/api/dial/dial_api_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/api/dial.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_system.h"
+#include "url/gurl.h"
using base::TimeDelta;
using content::BrowserThread;
+using extensions::api::dial::DeviceDescriptionFetcher;
using extensions::api::dial::DialDeviceData;
+using extensions::api::dial::DialDeviceDescriptionData;
using extensions::api::dial::DialRegistry;
namespace extensions {
@@ -50,10 +55,12 @@ DialAPI::~DialAPI() {}
DialRegistry* DialAPI::dial_registry() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (!dial_registry_.get()) {
- dial_registry_.reset(new DialRegistry(this,
- TimeDelta::FromSeconds(kDialRefreshIntervalSecs),
- TimeDelta::FromSeconds(kDialExpirationSecs),
- kDialMaxDevices));
+ dial_registry_.reset(new DialRegistry(
+ this, TimeDelta::FromSeconds(kDialRefreshIntervalSecs),
+ TimeDelta::FromSeconds(kDialExpirationSecs), kDialMaxDevices));
+ if (test_device_data_) {
+ dial_registry_->AddDeviceForTest(*test_device_data_);
+ }
}
return dial_registry_.get();
}
@@ -148,6 +155,14 @@ void DialAPI::SendErrorOnUIThread(const DialRegistry::DialErrorCode code) {
void DialAPI::ShutdownOnUIThread() {}
+void DialAPI::SetDeviceForTest(
+ const api::dial::DialDeviceData& device_data,
+ const api::dial::DialDeviceDescriptionData& device_description) {
+ test_device_data_ = base::MakeUnique<DialDeviceData>(device_data);
+ test_device_description_ =
+ base::MakeUnique<DialDeviceDescriptionData>(device_description);
+}
+
DialDiscoverNowFunction::DialDiscoverNowFunction()
: dial_(NULL), result_(false) {
}
@@ -170,4 +185,73 @@ bool DialDiscoverNowFunction::Respond() {
return true;
}
+DialFetchDeviceDescriptionFunction::DialFetchDeviceDescriptionFunction()
+ : dial_(nullptr) {}
+
+DialFetchDeviceDescriptionFunction::~DialFetchDeviceDescriptionFunction() {}
+
+bool DialFetchDeviceDescriptionFunction::RunAsync() {
+ dial_ = DialAPIFactory::GetForBrowserContext(browser_context()).get();
+ params_ = api::dial::FetchDeviceDescription::Params::Create(*args_);
+ EXTENSION_FUNCTION_VALIDATE(params_.get());
+
+ // DialRegistry lives on the IO thread. Hop on over there to get the URL to
+ // fetch.
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
+ base::Bind(&DialFetchDeviceDescriptionFunction::
+ GetDeviceDescriptionUrlOnIOThread,
+ this, params_->device_label));
+ return true;
+}
+
+void DialFetchDeviceDescriptionFunction::GetDeviceDescriptionUrlOnIOThread(
+ const std::string& label) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ const GURL& device_description_url =
+ dial_->dial_registry()->GetDeviceDescriptionURL(label);
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&DialFetchDeviceDescriptionFunction::MaybeStartFetch, this,
+ device_description_url));
+}
+
+void DialFetchDeviceDescriptionFunction::MaybeStartFetch(const GURL& url) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ if (url.is_empty()) {
+ SetError("Device not found");
+ SendResponse(false);
+ return;
+ }
+
+ if (dial_->test_device_data_ && dial_->test_device_description_ &&
+ dial_->test_device_data_->device_description_url() == url) {
+ OnFetchComplete(*(dial_->test_device_description_));
+ return;
+ }
+
+ device_description_fetcher_ = base::MakeUnique<DeviceDescriptionFetcher>(
+ url, Profile::FromBrowserContext(browser_context()),
+ base::BindOnce(&DialFetchDeviceDescriptionFunction::OnFetchComplete,
+ this),
+ base::BindOnce(&DialFetchDeviceDescriptionFunction::OnFetchError, this));
+
+ device_description_fetcher_->Start();
+}
+
+void DialFetchDeviceDescriptionFunction::OnFetchComplete(
+ const api::dial::DialDeviceDescriptionData& result) {
+ api::dial::DialDeviceDescription device_description;
+ device_description.device_label = params_->device_label;
+ device_description.app_url = result.app_url.spec();
+ device_description.device_description = result.device_description;
+ SetResult(device_description.ToValue());
+ SendResponse(true);
+}
+
+void DialFetchDeviceDescriptionFunction::OnFetchError(
+ const std::string& message) {
+ SetError(message);
+ SendResponse(false);
+}
+
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/dial/dial_api.h ('k') | chrome/browser/extensions/api/dial/dial_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698