12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_DIAL_DIAL_DEVICE_DATA_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_DIAL_DIAL_DEVICE_DATA_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace api { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace dial { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct DialDevice; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace api 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace dial 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Dial device information that is used within the DialService and Registry on 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the IO thread. It is updated as new information arrives and a list of 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// DialDeviceData is copied and sent to event listeners on the UI thread. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DialDeviceData { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DialDeviceData(); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DialDeviceData(const std::string& device_id, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& device_description_url, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time& response_time); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~DialDeviceData(); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator==(const DialDeviceData& other_data) const { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return device_id_ == other_data.device_id_; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& device_id() const { return device_id_; } 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_device_id(const std::string& id) { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_id_ = id; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& label() const { return label_; } 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_label(const std::string& label) { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) label_ = label; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& device_description_url() const; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_device_description_url(const GURL& url); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time& response_time() const { return response_time_; } 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_response_time(const base::Time& response_time) { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response_time_ = response_time; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_age() const { return max_age_; } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_max_age(int max_age) { max_age_ = max_age; } 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_max_age() const { return max_age_ >= 0; } 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int config_id() const { return config_id_; } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_config_id(int config_id) { config_id_ = config_id; } 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_config_id() const { return config_id_ >= 0; } 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fills the |device| API struct from this instance. 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FillDialDevice(api::dial::DialDevice* device) const; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates this DeviceData based on information from a new response in 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |new_data|. Returns |true| if a field was updated that is visible through 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the DIAL API. 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool UpdateFrom(const DialDeviceData& new_data); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Validates that the URL is valid for the device description. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool IsDeviceDescriptionUrl(const GURL& url); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Hardware identifier from the DIAL response. Not exposed to API clients. 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string device_id_; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Identifies this device to clients of the API as a proxy for the hardware 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // identifier. Automatically generated by the DIAL registry. 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string label_; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The device description URL. 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL device_description_url_; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The time that the most recent response was received. 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time response_time_; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Optional (-1 means unset). 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_age_; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Optional (-1 means unset). 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int config_id_; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_API_DIAL_DIAL_DEVICE_DATA_H_ 99