| Index: chrome/browser/extensions/api/dial/dial_service.h
|
| diff --git a/chrome/browser/extensions/api/dial/dial_service.h b/chrome/browser/extensions/api/dial/dial_service.h
|
| index 54ac715761d34fa5d73673b763b7b85b2954d5ca..a714f3590710d8e88c625327ece89a77ce473a8f 100644
|
| --- a/chrome/browser/extensions/api/dial/dial_service.h
|
| +++ b/chrome/browser/extensions/api/dial/dial_service.h
|
| @@ -91,6 +91,12 @@ class DialService {
|
| virtual bool HasObserver(Observer* observer) = 0;
|
| };
|
|
|
| +// Implements DialService.
|
| +//
|
| +// NOTE(mfoltz): It would make this class cleaner to refactor most of the state
|
| +// associated with a single discovery cycle into its own |DiscoveryOperation|
|
| +// object. This would also simplify lifetime of the object w.r.t. DialRegistry;
|
| +// the Registry would not need to create/destroy the Service on demand.
|
| class DialServiceImpl : public DialService,
|
| public base::SupportsWeakPtr<DialServiceImpl> {
|
| public:
|
| @@ -104,13 +110,16 @@ class DialServiceImpl : public DialService,
|
| virtual bool HasObserver(Observer* observer) OVERRIDE;
|
|
|
| private:
|
| - // Starts the flow to construct and send a discovery request.
|
| - void StartRequest();
|
| + // Starts the control flow for one discovery cycle.
|
| + void StartDiscovery();
|
|
|
| - // Establishes the UDP socket that is used for requests and responses, then
|
| - // sends a discovery request on the bound socket. Returns |true| if
|
| - // successful.
|
| - bool BindAndWriteSocket(const net::NetworkInterface& bind_interface);
|
| + // Establishes the UDP socket that is used for requests and responses,
|
| + // establishes a read callback on the socket, and sends the first discovery
|
| + // request. Returns true if successful.
|
| + bool BindSocketAndSendRequest(const net::IPAddressNumber& bind_ip_address);
|
| +
|
| + // Sends a single discovery request over the socket.
|
| + void SendOneRequest();
|
|
|
| // Callback invoked for socket writes.
|
| void OnSocketWrite(int result);
|
| @@ -181,18 +190,30 @@ class DialServiceImpl : public DialService,
|
| // The number of requests that have been sent in the current discovery.
|
| int num_requests_sent_;
|
|
|
| + // The maximum number of requests to send per discovery cycle.
|
| + int max_requests_;
|
| +
|
| // Timer for finishing discovery.
|
| base::OneShotTimer<DialServiceImpl> finish_timer_;
|
|
|
| // The delay for |finish_timer_|; how long to wait for discovery to finish.
|
| + // Setting this to zero disables the timer.
|
| base::TimeDelta finish_delay_;
|
|
|
| + // Timer for sending multiple requests at fixed intervals.
|
| + base::RepeatingTimer<DialServiceImpl> request_timer_;
|
| +
|
| + // The delay for |request_timer_|; how long to wait between successive
|
| + // requests.
|
| + base::TimeDelta request_interval_;
|
| +
|
| // List of observers.
|
| ObserverList<Observer> observer_list_;
|
|
|
| // Thread checker.
|
| base::ThreadChecker thread_checker_;
|
|
|
| + FRIEND_TEST_ALL_PREFIXES(DialServiceTest, TestSendMultipleRequests);
|
| FRIEND_TEST_ALL_PREFIXES(DialServiceTest, TestOnDeviceDiscovered);
|
| FRIEND_TEST_ALL_PREFIXES(DialServiceTest, TestOnDiscoveryFinished);
|
| FRIEND_TEST_ALL_PREFIXES(DialServiceTest, TestOnDiscoveryRequest);
|
|
|