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

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

Issue 2583853004: [chrome.dial] Adds chrome.dial.fetchDeviceDecription API. (Closed)
Patch Set: Respond to imcheng@ comments Created 3 years, 12 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
Index: chrome/browser/extensions/api/dial/dial_api.h
diff --git a/chrome/browser/extensions/api/dial/dial_api.h b/chrome/browser/extensions/api/dial/dial_api.h
index c9ba27a5081a534bdead0d5e1d25316cab6e3f6e..2e5757a2c31586e1489e297887869b6815ae6181 100644
--- a/chrome/browser/extensions/api/dial/dial_api.h
+++ b/chrome/browser/extensions/api/dial/dial_api.h
@@ -10,14 +10,20 @@
#include "base/macros.h"
#include "chrome/browser/extensions/api/dial/dial_device_data.h"
#include "chrome/browser/extensions/api/dial/dial_registry.h"
+#include "chrome/common/extensions/api/dial.h"
#include "components/keyed_service/core/refcounted_keyed_service.h"
#include "extensions/browser/api/async_api_function.h"
#include "extensions/browser/event_router.h"
namespace extensions {
+class DeviceDescriptionFetcher;
class DialRegistry;
+namespace api {
+class DialFetchDeviceDescriptionFunction;
+} // namespace api
+
// Dial API which is a ref-counted KeyedService that manages
// the DIAL registry. It takes care of creating the registry on the IO thread
// and is an observer of the registry. It makes sure devices events are sent out
@@ -26,6 +32,13 @@ class DialRegistry;
// TODO(mfoltz): This should probably inherit from BrowserContextKeyedAPI
// instead; ShutdownOnUIThread below is a no-op, which is the whole point of
// RefcountedKeyedService.
+//
+// TODO(mfoltz): The threading model for this API needs to be rethought. At a
+// minimum, DialRegistry should move to the UI thread to avoid extra thread hops
+// here, allow a straightforward GetDeviceList implementation
+// (crbug.com/576817), cleanup some long-tail crashes (crbug.com/640011) that
+// are likely due to lifetime issues, and simplify unit tests
+// (crbug.com/661457).
class DialAPI : public RefcountedKeyedService,
public EventRouter::Observer,
public DialRegistry::Observer {
@@ -41,9 +54,15 @@ class DialAPI : public RefcountedKeyedService,
void SendEventOnUIThread(const DialRegistry::DeviceList& devices);
void SendErrorOnUIThread(const DialRegistry::DialErrorCode type);
+ // Sets test device data. For tests only.
+ void SetDeviceForTest(const DialDeviceData& device_data,
+ const DialDeviceDescription& device_description);
+
private:
~DialAPI() override;
+ friend class api::DialFetchDeviceDescriptionFunction;
+
// RefcountedKeyedService:
void ShutdownOnUIThread() override;
@@ -65,6 +84,10 @@ class DialAPI : public RefcountedKeyedService,
// Created lazily on first access on the IO thread.
std::unique_ptr<DialRegistry> dial_registry_;
+ // Device data for testing.
+ DialDeviceData test_device_data_;
+ DialDeviceDescription test_device_description_;
+
DISALLOW_COPY_AND_ASSIGN(DialAPI);
};
@@ -100,6 +123,33 @@ class DialDiscoverNowFunction : public AsyncApiFunction {
DISALLOW_COPY_AND_ASSIGN(DialDiscoverNowFunction);
};
+class DialFetchDeviceDescriptionFunction : public AsyncExtensionFunction {
+ public:
+ DialFetchDeviceDescriptionFunction();
+
+ protected:
+ ~DialFetchDeviceDescriptionFunction() override;
+
+ // AsyncExtensionFunction:
+ bool RunAsync() override;
+
+ private:
+ DECLARE_EXTENSION_FUNCTION("dial.fetchDeviceDescription",
+ DIAL_FETCHDEVICEDESCRIPTION)
+
+ void GetDeviceDescriptionUrlOnIOThread(const std::string& label);
+ void MaybeStartFetch(const GURL& url);
+ void OnFetchComplete(const DialDeviceDescription& result);
+ void OnFetchError(const std::string& result);
+
+ std::unique_ptr<api::dial::FetchDeviceDescription::Params> params_;
+ std::unique_ptr<DeviceDescriptionFetcher> device_description_fetcher_;
+
+ DialAPI* dial_;
+
+ DISALLOW_COPY_AND_ASSIGN(DialFetchDeviceDescriptionFunction);
+};
+
} // namespace api
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698