WebAPI/SettingsAPI: Difference between revisions

no edit summary
(→‎Proposed API: add onchange method)
No edit summary
 
(9 intermediate revisions by 6 users not shown)
Line 1: Line 1:
== Status ==
== Status ==


The proposed specification doesn't have a fully working implementation yet. Patches will appear in {{bug|678695}}.
This was implemented for B2G in {{bug|678695}}.


== Proposed API ==
== Proposed API ==
Line 7: Line 7:
There is a readonly mozSettings attribute in ''window.navigator'' that would return an object implementing the ''SettingsManager'' interface.
There is a readonly mozSettings attribute in ''window.navigator'' that would return an object implementing the ''SettingsManager'' interface.


  interface SettingsManager : EventTarget
The implementation keeps a queue of active locks. When a lock is created it's placed at the end of the queue. Calls to get/set places a request against the lock on which it's called. Requests run asynchronously and in the order they are placed against a lock. When the last request for a lock is run, and we've fired the success/error event against it, the lock is removed from the queue and we start processing the next lock.
  {
    // List of known settings.
    const DOMString FOOBAR = "foobar";
 
    // SettingsRequest.result contains the new value of the setting.
    SettingsRequest set(DOMString name, DOMString value);
 
    // SettingsRequest.result contains the value of the setting.
    SettingsRequest get(DOMString name);


    attribute Function? onchange;
interface SettingsManager : EventTarget
   }
{
  SettingsLock getLock();
  void addObserver(DOMString name, Function observer);
}
interface SettingsLock
{
   // Contains a JSON object with name/value pairs to be set.
  DOMRequest set(any settings);
  // result contains the value of the setting.
  DOMRequest get(DOMString name);
  // XXX not implemented
  // result contains JSON object with name/value pairs.
  DOMRequest get(DOMString[] names);
}


  /* Similar to SmsRequest. */
/* Same as used in other specs. */
  interface SettingsRequest
interface DOMRequest
  {
{
    readonly attribute DOMString    readyState; // "processing" or "done"
  readonly attribute DOMString    readyState; // "processing" or "done"
    readonly attribute DOMError?    error;
  readonly attribute DOMError?    error;
            attribute EventListener onsuccess;
            attribute EventListener onsuccess;
            attribute EventListener onerror;
            attribute EventListener onerror;
            attribute readonly any? result;
            attribute readonly any? result;
  };
};


  [Constructor(DOMString type, optional SettingsEventInit settingsEventInitDict)]
[Constructor(DOMString type, optional SettingsEventInit settingsEventInitDict)]
  interface SettingsEvent : Event
interface SettingsEvent : Event
  {
{
    readonly attribute DOMString settingName;
  readonly attribute DOMString settingName;
    readonly attribute DOMString settingValue;
  readonly attribute any      settingValue;
  };
};
   
   
  dictionary SettingsEventInit : EventInit {
dictionary SettingsEventInit : EventInit {
    DOMString settingName;
  DOMString settingName;
    DOMString settingValue;
  any      settingValue;
  }
}


''SettingsEvent'' is used for the followings events:
''SettingsEvent'' is used for the followings events:
Line 51: Line 59:
* If a setting is unknown by the platform, it should fail.
* If a setting is unknown by the platform, it should fail.
* But some platforms might not know some settings. Do we want to add a method that checks if the platform knows a specific setting?
* But some platforms might not know some settings. Do we want to add a method that checks if the platform knows a specific setting?
* get('*') returns all settings.
[[Category:Web APIs]]
Confirmed users
1,340

edits