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