WebAPI/SystemUpdateAPI: Difference between revisions
< WebAPI
Jump to navigation
Jump to search
JamesCheng (talk | contribs) (→Status: update buglist) |
JamesCheng (talk | contribs) (→Features: update) |
||
Line 10: | Line 10: | ||
== Features == | == Features == | ||
* . | * Provide a standard WebAPI interface for interaction between applocation and update providers. | ||
* . | * Provide a plugin mechanism for partner to inject their update provider module into gecko. | ||
* . | * Dynamically switch between different update providers. | ||
== Proposed API == | == Proposed API == |
Revision as of 08:52, 3 August 2015
Goals
Contributors
Shih-Chiang Chien, James Cheng
Status
- Implement SystemUpdate WebAPI: See bug 1037329.
- Migrate settings app to use new system update API: See bug 1161927.
- Remove the old mozChromeEvent/mozContentEvent mechanism from UpdatePrompt.js in gecko: See bug 1172244.
Features
- Provide a standard WebAPI interface for interaction between applocation and update providers.
- Provide a plugin mechanism for partner to inject their update provider module into gecko.
- Dynamically switch between different update providers.
Proposed API
Basic WebIDL Interface
[JSImplementation="@mozilla.org/system-update-provider;1", CheckPermissions="system-update", Pref="dom.system_update.enabled"] interface SystemUpdateProvider : EventTarget { readonly attribute DOMString name; readonly attribute DOMString uuid; attribute EventHandler onupdateavailable; attribute EventHandler onprogress; attribute EventHandler onupdateready; attribute EventHandler onerror; void checkForUpdate(); void startDownload(); void stopDownload(); void applyUpdate(); boolean setParameter(DOMString name, DOMString value); DOMString getParameter(DOMString name); }; [NavigatorProperty="updateManager", JSImplementation="@mozilla.org/system-update-manager;1", CheckPermissions="system-update", Pref="dom.system_update.enabled"] interface SystemUpdateManager { Promise<sequence<SystemUpdateProviderInfo>> getProviders(); Promise<SystemUpdateProvider> setActiveProvider(DOMString uuid); Promise<SystemUpdateProvider> getActiveProvider(); };
Examples
navigator.udpateManager.getProviders().then(function(providerInfos) { var providerInfo = providerInfos[0]; return navigator.updateManager.setActiveProvider(providerInfo.uuid); }).then(function(provider) { // notify available update checkButton.onclick = function(event) { provider.checkForUpdate(); }; provider.onupdateavailable = function(evt) { showUpdateAvailable(event.detail.packageInfo); downloadButton.onclick = function(event) { provider.startDownload(); }; }; // display download progress provider.onprogress = function(event) { showDownloadProgress(event); }; // prompt when update package is ready to apply provider.onupdateready = function(event) { showUpdateReady(); applyButton.onclick = function() { provider.applyUpdate(); }; }; });
Scheduled update
var myDate = new Date("May 15, 2012 16:20:00"); var req = navigator.mozAlarms.add(myDate, "ignoreTimezone", provider.info); req.onsuccess = function(event) { var info = event.alarm.data; navigator.updateManager.setActiveProvider(info.uuid) .then(function(provider) { provider.checkForUpdate(); }); };