Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
635 lines (548 sloc) 30.2 KB

Link

2015-12-29

Looking back on Browser scene in 2015

このエントリは2015年にブラウザに実装された新機能と変更箇所の要点をまとめたものです。

ES6

ブラウザ毎の ES6 の対応状況です。

Chrome と Firefox が先行しており、iOS Safari は iOS 10 で一式実装される予定です(Proxy, TailCall, Modules は入らないかもしれません)。

ES6 Features Chrome 49 Firefox 45 Safari 9 Edge IE 11
Modules
Tail call
Proxy YES YES YES
Reflect YES YES YES
Default function parameters YES YES YES
Rest parameters YES YES YES
Spread (...) operators YES YES YES YES
Object literal extensions YES YES YES YES
for ... of loops YES YES YES YES
Octal and Binary literals YES YES YES YES
Template Strings YES YES YES YES
RegExp extensions YES YES YES
Destructuring declarations YES YES YES YES
Destructuring assignment YES YES YES YES
Destructuring parameters YES YES YES YES
Unicode code point escapes YES YES YES YES
new.target YES YES
const YES YES YES YES
let YES YES YES YES
block-level function declaration YES YES YES YES
Arrow functions YES YES YES
Classes YES YES Partial YES
Class super YES YES Partial YES
Generators YES YES YES
TypedArray YES YES YES YES YES
Map YES YES YES YES YES
Set YES YES YES YES YES
WeakMap YES YES YES YES YES
WeakSet YES YES YES YES
Promises YES YES YES YES
Symbols YES YES YES YES
Object extensions YES YES YES YES
Array extensions YES YES YES YES
Number extensions YES YES YES YES
String extensions YES YES YES YES
Function extensions YES YES YES YES
Math extensions YES YES YES YES
Array subclassing YES YES Partial YES
String subclassing YES YES YES
Function subclassing YES YES YES

Chrome

Chrome における新機能/変更点のまとめです。

NPAPIプラグインの廃止、Android 4.0.x の非サポート,各OSにおける64bit化などインパクトの大きい年でした。

  • Mac 64版リリース。Mac OS 32bit版は廃止に (v40)
    • Windows版は64bit版と32bit版の選択が可能 (2015-12-29)
  • SSLv3 の無効化とTLSのデフォルト化 (v40)
  • NPAPIプラグインの廃止(v45)
  • Object.observe() の廃止 (v49)
  • Chrome for Android は Android 4.0.x を非サポートに (v43)
  • JavaScript API
    • remove showModalDialog (v42)
    • WebAudio
      • PannerNode (v40)
      • StereoPannerNode (v41)
      • AudioContext.suspend() and resume() (v41)
      • OfflineAudioContext.suspend() and resume() (v49)
      • Selective Disconnection on AudioNode.disconnect() (v43)
      • AudioBuffer copyFromChannel and copyToChannel (v43)
      • Allow developers to close an AudioContext explicitly (v43)
      • ChannelMergerNode Static Routing (v44)
    • Service Worker (v40)
      • Cache API (v40)
      • Web Notification (v42)
        • Notification.data and ServiceWorkerRegistration.getNotifications (v44)
      • Push API (v42)
        • Payloads (v49)
      • ServiceWorkerRegistration.update() (v45)
      • ServiceWorkerContainer.getRegistrations() (v45)
      • Client.postMessage and ServiceWorkerMessageEvent (v45)
      • Client.id (v45)
      • Change the fetch API request flags (mode, credentials and redirect) for navigation requests. (v47)
      • NotificationOptions.requireInteraction, and auto-minimize timeout (v47)
      • ServiceWorkerRegistration.update() does not bypass the browser HTTP cache (v48)
      • Notification action buttons (v48)
      • self.client.navigate(url) (v48)
      • Background Sync API (v49)
    • Cache API (v43)
      • Cache.add() (v44)
      • Cache.addAll() (v46)
      • Cache API is restricted to secure origins (v46)
      • Cache.matchAll() (v47)
    • Fetch API (v42)
      • Fetch streaming response body (v43)
      • Request.context (v44)
      • Request.redirect (v46)
      • RequestInit.referrer (v47)
      • data and blob schemes support (v48)
      • New value "navigate" for Request.mode (v49)
    • new ImageData (v42)
    • Media Extension
      • Encrypted Media Extensions (v42)
    • Permissions API (v43)
    • WebWorkers
      • Performance Timeline APIs for Workers (v46)
      • new URLSearchParams
    • requestIdleCallback (v47)
    • Presentation API (v48)
    • IndexedDB getAll() methods (v48)
    • new URLSearchParams(url) (v49)
  • HTML / CSS / DOM / SVG / WebGL
    • HTML
      • <input autocapitalize> (v43)
      • <link rel="preconnect" href="//cdn.example.com" crossorigin> (v46)
      • <iframe id="green" src="iframe.html" sandbox="allow-popups"></iframe> (v46)
    • DOM
      • MouseEvent#buttons (v43)

      • Document.elementsFromPoint (v43)

      • Document.scrollingElement (v44)

      • Touch#rotationAngle (v45)

      • Event#isTrusted attribute (v46)

      • new DOMException (v46)

      • MouseEvent#getModifierState() (v47)

      • High Resolution Time Stamp for Events (v47)

      • addEventListener と removeEventListener の第三引数が Optional Boolean から Optional Object に拡張されました

        • addEventListener(type:EventTypString, handler:EventCallbackFunction, options:EventListenerOptions = null):void (v47)
        document.addEventListener("touchstart", handler, {capture: true});
        document.addEventListener("touchstart", handler, {passive: true});
      • API to disable scroll restoration on history navigation (v46)

        if ("scrollRestoration" in history) {
          // Back off, browser, I got this...
          history.scrollRestoration = 'manual';
        }
      • addEventListener("keydown", function(event) { event.code }) (v48)

      • new Touch (v48)

      • new TouchEvent (v48)

    • CSS
      • image-rendering: pixelated (v41)
      • mix-blend-mode: xxx (v41)
      • Multi-column (new implementation) (v45)
      • Motion Path (v45)
      • CSS.escape() (v46)
      • CSS Intrinsic Sizing (v46)
      • font-feature-settings: xxx (v48)
      • new FontFace (v48)
      • Case-insensitive Attribute Selector Matching [frame=hsides i] { ... } (v49)
      • font-display: xxx (v49)
    • SVG
      • SVG hasExtension() methods (v47)
    • WebGL
      • EXT_disjoint_timer_query WebGL extension (v47)
  • Web Application Manifest
    • Web App Install Banners (in WebApplicationManifest) (v42)
    • beforeinstallprompt event for web/native app install banners (v44)
    • Parsing theme_color from Web Application Manifest (v46)
    • Parsing background_color from Web Application Manifest (v46)
  • Auxiliary
    • MIDI API (v43)

    • Web Bluetooth (from v45)

    • NotificationOptions.vibrate (v45)

    • Audio Output Devices API (v45)

    • navigator.mediaDevices (v47)

    • WebRTC

      • Data Channel buffer monitoring with the "bufferedamountlow" event (v46)
      • API for choosing key pair algorithm (RSA, ECDSA) for certificates used in DTLS handshake (v48)
      • VP9 software encoder/decoder in Chrome for WebRTC (v48)
      • MediaStreamTrack.remote attribute (v48)
    • VR

      • Access relative orientation sensors from Chrome for Android for Virtual Reality (v46)
    • HTTP Client Hints: DPR, Width, Viewport-Width (v46)

      --- REQUEST ---
      GET /img.jpg HTTP/1.1
      User-Agent: Awesome Browser
      Accept: image/webp, image/jpg
      DPR: 2.0
      
      --- RESPONSE ---
      HTTP/1.1 200 OK
      Server: Awesome Server
      Content-Type: image/jpg
      Content-Length: 124523
      Vary: DPR
      Content-DPR: 2.0
      
      (response body - image data -)

Safari

  • WebWorkers で WebSQL が利用不能になりました (v9)
  • SharedWorkers が再び利用不能になりました (v9)
  • ForceTouchEvent/ForceMouseEvent が実装されました (v9, iPhone 6s)
  • JavaScript API
    • performance.now()
    • INTL (i18n) API
    • picture-in-picture API
  • HTML / CSS / DOM / SVG / WebGL
    • HTML
      • node.style.webkitFontFeatureSettings
      • DocumentFragment.getElementById
      • Document.scrollingElement
      • <attachment>
      • <img srcset="..." sizes="...">
    • DOM
      • ForceTouchEvent
      • ForceMouseEvent
    • CSS
      • CSS Grid Layout Level 1 (partial) (v9)
      • CSS Selectors Level 4 (v9)
      • position:sticky (v8)
      • will-change: xxx (v9)
      • fixed calc()
      • calc( 1grad ), calc( 10ms )
      • mix-blend-mode:plus-lighter
      • mix-blend-mode:plus-darker
      • font-synthesis
      • word-break:keep-all
      • -webkit-appearance: -apple-airplay
    • Canvas
      • ctx.ellipse()
      • -webkit-mask-image
    • WebGL
      • WebGL1 extension
  • Auxiliary

Edge

  • JavaScript API
    • Media Extension (Encrypted Media Extensions)
    • FileReader API (FileWriter は未実装です)
    • Fullscreen API
    • GamePad API
    • Pointer Lock (Mouse Lock) API
    • Screen Orientation API
    • Touch Events API
    • Web Audio API (basic support)
    • Web Crypto API
  • HTML / CSS / DOM / SVG / WebGL
    • HTML
      • Extended srcset and sizes support (<img srcset="...">)
      • <picture> Element
      • <template> Element
    • DOM
      • Mutation Observers
      • oninvalid event handler
    • CSS
      • Flexbox
      • Subpixel font scaling
    • WebGL
      • WebGL (Canvas 3D)
      • WebGL Instancing Extension
  • Auxiliary
    • HTTP/2
    • HTTP Live Streaming (HLS)
    • WebRTC
      • Media Capture and Streams (getUserMedia)
      • Media Source Extensions
      • Object RTC API
    • Motion JPEG (MJPG)
    • WAV Audio Support

Firefox

  • SSLv3 の無効化 (v34)
  • JavaScript API
    • Web Crypto API (v34)
    • WebWorkers
      • performance.now() (v34)
      • IndexedDB (v37)
      • WebSocket (v38)
    • console.table (v34)
    • Resource Timing API (v35)
    • Font loading API (v41)
    • BroadcastChannel API (v38)
    • Media Extension
      • Encrypted Media Extensions (v38)
    • Service Workers (v44)
    • Fetch API (v39)
    • Cache API (v41)
    • Web Audio API
      • AudioBufferSourceNode detune attribute (v40)
    • WebSocket Debugging API (v44)
    • MessageChannel API
    • MessagePort API
    • Offline API (navigator.onLine windows and Mac only) (v41)
    • Canvas API
      • new ImageBitmap, createImageBitmap() (v42)
  • HTML / CSS / DOM / SVG / WebGL
    • HTML
      • Extended srcset and sizes support (<img srcset="...">)
      • <picture> Element
      • <link rel="preconnect" href="//cdn.example.com" crossorigin> (v39)
    • DOM
      • matches selector (v34)
      • addEventListener("keydown", function(event) { event.code }) (v48)
      • document.execCommand("cut")
      • document.execCommand("copy")
    • CSS
      • CSS Filters (v35)
      • unicode-range (v36)
      • will-change: xxx (v36)
      • display:contents (v37)
      • scroll-snap-points-y: xxx CSS Scroll Snap Points (v38)
    • SVG
      • transform-origin: xxx (v41)
    • WebGL
      • EXT_blend_minmax (v35)
  • Auxiliary
    • HTTP/2 (v36)
    • WebRTC
      • Media Source Extensions (windows only) (v37)
      • Enhancement (v42)
        • IPv6

2015-12-21

Many of Android 4.4 devices that had been released from the Japanese telecommunications carriers has been updated to Android L.

先日、 国内キャリア(docomo, au, softbank)から発売済みの Android 4.4.x 端末で予定されていた Android 5.0.x へのアップデート作業が完了しました。

これにより、国内キャリアから発売された端末の 70%以上が Android 5.0.x に切り替わったと考えられます。 (割合ベースでは 46% ですが、不人気端末はOSアップデートが実施されない背景などを考慮すると、販売台数ベースでは 70% 以上の端末が Android 4.4.x → 5.0.x に更新されていると考えられます)

キャリア別 4.4.x 端末 5.x update 端末 アップデート率
docomo 18 12 66 %
au 20 9 45 %
softbank 10 1 10 %
合計 48 22 46 %
メーカー別 4.4.x 端末 5.x update 端末 アップデート率
SONY 9 8 89 %
SAMSUNG 8 7 88 %
LG 3 2 67 %
FUJITSU 4 2 50 %
SHARP 13 3 23 %
KYOCERA 8 0 0 %
ASUS 1 0 0 %
HTC 1 0 0 %
HUAWEI 1 0 0 %

より詳しく知りたい方は、 Spec.js のデータを直接参照してください。

// --- docomo ---
    // 2014 winter
                  SoC          発売日 OS Version
 *  "SO-01G":   [ "MSM8974AC",  1410, "444-502" ], // SONY    Xperia Z3
 *  "SO-02G":   [ "MSM8974AC",  1411, "442-502" ], // SONY    Xperia Z3 Compact
 *  "SC-01G":   [ "APQ8084",    1410, "442-501" ], // SAMSUNG GALAXY Note Edge
 *  "SC-02G":   [ "MSM8974AC",  1410, "442-500" ], // SAMSUNG GALAXY S5 ACTIVE
 *  "SC-03G":   [ "MSM8974AC",  1412, "442-502" ], // SAMSUNG GALAXY Tab S 8.4
 *  "SH-01G":   [ "MSM8974AB",  1411, "442-502" ], // SHARP   AQUOS ZETA SH-01G
    "SH-02G":   [ "MSM8974AB",  1411, "442-442" ], // SHARP   Disney Mobile on docomo SH-02G
 *  "F-02G":    [ "MSM8974AB",  1411, "442-502" ], // FUJITSU ARROWS NX F-02G
    "F-03G":    [ "MSM8974AB",  1411, "442-442" ], // FUJITSU ARROWS Tab F-03G
    // 2014 summer
 *  "SC-04F":   [ "MSM8974AC",  1405, "442-500" ], // SAMSUNG GALAXY S5
 *  "SO-03F":   [ "MSM8974AB",  1405, "442-502" ], // SONY    Xperia Z2
    "SO-04F":   [ "MSM8974AA",  1406, "442-442" ], // SONY    Xperia A2
 *  "SO-05F":   [ "MSM8974AB",  1405, "442-502" ], // SONY    Xperia Z2 Tablet
 *  "SH-04F":   [ "MSM8974AB",  1405, "442-502" ], // SHARP   AQUOS ZETA SH-04F
    "SH-05F":   [ "MSM8974AA",  1405, "422-422" ], // SHARP   Disney Mobile on docomo SH-05F
    "SH-06F":   [ "MSM8974AB",  1406, "442-442" ], // SHARP   AQUOS PAD SH-06F
 *  "F-05F":    [ "MSM8974AB",  1405, "442-502" ], // FUJITSU ARROWS NX F-05F
    "F-06F":    [ "MSM8926",    1407, "442-442" ], // FUJITSU Silver age model F-06F
// --- au ---
    // 2015 winter
    "KYV33":    [ "MSM8974AB",  1502, "444-444" ], // KYOCERA INFOBAR A03
    "SHV31":    [ "MSM8974AB",  1501, "444-444" ], // SHARP   AQUOS SERIE mini
    "KYV32":    [ "MSM8974AB",  1502, "444-444" ], // KYOCERA BASIO
    "KYL23":    [ "MSM8926",    1501, "444-444" ], // KYOCERA miraie (no Google Play)
    "SHF32":    [ "MSM8926",    1507, "444-444" ], // SHARP   AQUOS K
    "SHF31":    [ "MSM8926",    1502, "444-444" ], // SHARP   AQUOS K
    // 2014 fall and winter
 *  "SCT21":    [ "MSM8974AC",  1412, "444-502" ], // SAMSUNG GALAXY Tab S
 *  "LGV31":    [ "MSM8974AC",  1412, "442-502" ], // LG      isai VL
    "KYV31":    [ "MSM8974AB",  1412, "444-444" ], // KYOCERA URBANO V01
 *  "SOL26":    [ "MSM8974AC",  1410, "444-502" ], // SONY    Xperia Z3
 *  "SCL24":    [ "APQ8084",    1410, "444-501" ], // SAMSUNG GALAXY Note Edge
    // 2014 summer
    "AST21":    [ "Z3580",      1408, "442-442" ], // ASUS    MeMO Pad 8
 *  "SOT21":    [ "MSM8974AB",  1407, "442-502" ], // SONY    Xperia Z2 Tablet
    "HTL23":    [ "MSM8974AC",  1408, "442-444" ], // HTC     HTC J butterfly
    "KYY24":    [ "MSM8928",    1407, "442-442" ], // KYOCERA TORQUE G01
    "KYY23":    [ "MSM8974AB",  1406, "442-442" ], // KYOCERA URBANO L03
 *  "SHL25":    [ "MSM8974AB",  1406, "442-502" ], // SHARP   AQUOS PHONE SERIE SHL25
 *  "SCL23":    [ "MSM8974AC",  1405, "442-500" ], // SAMSUNG Galaxy S5
 *  "SOL25":    [ "MSM8974AB",  1405, "442-502" ], // SONY    Xperia ZL2
 *  "LGL24":    [ "MSM8974AC",  1407, "442-502" ], // LG      isai FL
// --- softbank ---
    "404KC":    [ "MSM8916",    1502, "444-444" ], // KYOCERA DIGNO U
    "402LG":    [ "MSM8926",    1502, "442-442" ], // LG      Spray
    "403SC":    [ "MSM8926",    1412, "442-442" ], // SAMSUNG GALAXY Tab 4
    "402SH":    [ "MSM8974AB",  1412, "444-444" ], // SHARP   AQUOS CRYSTAL X
    "403HW":    [ "KIRIN910",   1412, "442-442" ], // HUAWEI  MediaPad M1 8.0
    "401SH":    [ "MSM8926",    1411, "442-442" ], // SHARP   Simple Smart Phone 2
 *  "401SO":    [ "MSM8974AC",  1411, "444-502" ], // SONY    Xperia Z3
    "302KC":    [ "MSM8926",    1409, "442-442" ], // KYOCERA DIGNO T
    "305SH":    [ "MSM8926",    1409, "442-442" ], // SHARP   AQUOS CRYSTAL 305SH
    "304SH":    [ "MSM8974AB",  1405, "442-442" ], // SHARP   AQUOS Xx 304SH

 * は Android 4.4.x から 5.0.x にアップデートされた端末です

2015-12-16

iOS 9.2.1 beta released

  • iOS 9.2.1 beta がリリースされています。

2015-12-12

The requestIdleCallback API has been implemented in Chrome

  • 余裕がある状態なら関数をコールバックするメカニズム requestIdleCallback が Chrome 47 に実装されました
    • requestIdleCallback Spec

    • window.requestIdleCallback(callback:IdleRequestCallbackFunction, options:IdleRequestOptionsObject = null):UINT32

    • requestIdleCallback で登録した関数を呼び出さないようにする window.cancelIdleCallback(handle:UINT32):void もあります

    • options に { timeout: 1000 } を指定すると、1秒後にタイムアウトします

    • callback は callback(deadline:deadlineObject):void の形でコールバックします

    • deadlineObject は { didTimeout: Boolean, timeRemaining: timeRemainingFunction } です

    • timeRemainingFunction は DOMHighResTimeStamp を返す関数です

      var count = 0;
      function idle(deadline) {
          console.log( deadline.didTimeout, deadline.timeRemaining() ); // Vsync までの残り時間(ms.us)です
          if (count++ <= 10) {
              requestIdleCallback(idle);
          }
      }
      requestIdleCallback(idle);
      
      > false 49.92000000000001
      > false 49.96000000000001
      > false 49.955000000000005
      > false 49.985
      > false 49.99000000000001
      > false 49.965
      > false 49.985
      > false 49.99000000000001
      > false 49.970000000000006
      > false 49.99000000000001

MouseEvent#getModifierState API has been implemented in Chrome

  • マウスイベント発生時に同時に押していたキーを取得するメカニズム MouseEvent#getModifierState が Chrome 47 に実装されました
    • MouseEvent#getModifierState Spec

    • MouseEvent#getModifierState(modifierkey:String):Boolean

    • modifierkey には "Alt", "Fn", "Meta", "Control", "Shift" などが指定可能です

      document.body.onclick = function(event) {
          // Shift key を押しながら画面をクリックすると true になります
          console.log(event.getModifierState("Shift")); // -> true or false
      };

The value of Event#timeStamp has been changed in Chrome

  • DOM Event のタイムスタンプ(timeStamp)の基準となる時刻と値の意味が Chrome 49 で変更になりました
    • Event#timeStamp の値が High Resolution Time Stamp に変更になりました。

    • これまでの Event#timeStamp は Date.now() が返す1970年を基準としたms単位の値でしたが、 High Resolution Time Stamp はページロードからの秒数(ミリ秒.マイクロ秒)のdouble値になります。

    • 互換性がないため、Event#timeStamp を参照しているコードに心当たりがある場合は気をつけてください

      document.body.onclick = function(event) {
          console.log(event.timeStamp); // -> 5426.6900000000005
      };

WebAudio OfflineAudio API has been implemented in Chrome

CanvasProxy API died, consideration of Offscreencanvas began

  • 2013-05 から検討を重ねていた CanvasProxy の検討が中断し、2015-12-01 から OffscreenCanvas についての検討が始まっています
    • CanvasProxy - Support Canvas drawing in workers

    • OffscreenCanvas - Implement and ship the OffscreenCanvas feature

    • OffscreenCanvas は WebWorkers上においても完全に非同期で動作することが期待されています

    • この提案は Safari, Chrome, IE, Firefox の座組で吟味が行われており、APIの基本合意に至った場合は広く互換性のある実装が行われる可能性があります

    • 以下は提案されているAPIを使った実装の一例です

      // surface.js
      var surfaceCanvas = document.createElement("canvas");
      surfaceCanvas.width = 300;
      surfaceCanvas.height = 300;
      document.body.appendChild(surfaceCanvas);
      
      var offscreenCanvas = surfaceCanvas.transferControlToOffscreen();
      
      //var offscreenCanvas = new OffScreenCanvas(300, 300);
      //var offscreenContext = offscreenCanvas.getContext("webgl");
      
      var renderWorker = new Worker("renderThread.js");
      renderWorker.postMessage({ message: "init", payload: offscreenCanvas }, [offscreenCanvas]); // transferables
      
      function tick() {
          requestAnimationFrame(tick);
          renderWorker.postMessage({ message: "update" });
      }
      requestAnimationFrame(tick);
      // renderThread.js
      var gl = null; // WebGL OffscreenCanvas context
      
      self.onmessage = function(event) {
          switch (event.data.message) {
          case "init":
              var offscreenCanvas = event.data.payload;
              gl = offscreenCanvas.getContext("webgl");
              break;
          case "update":
              update();
          }
      }
      
      function update() {
          gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
          // :
          // :
          gl.commit(); // WebGLRenderingContextBase#commit
      }

2015-12-11

Part of the Softbank mobile device it will not be available from 2016

Part of the Softbank and wilcomm mobile device it will not be available from 2017-04-01

  • Softbank と Y!mobile(旧wilcomm) の3G帯域再利用に伴い、2017-04-01以降に利用不能になる機種や、通信速度が低速になる機種があります
    • LTEサービスの拡大および 一部の3Gサービス終了について

    • Softbank 対象機種

      101SB, 101SI, 102Z, 102HW, 006Z, 007Z/Z for Biz, 005HW, 101SB, 001SC, 005SH, 007HW, 001P, 002SH, 003P, 004SH/SH PJ, 004Z, 006SH, 007SH/SH J, 007SH KT, 008Z, 009SH, 009SH Y, 009Z, 101F, 101K, 101N, 101P, 101SH, 102P, 102SH/SH II, 103SH, 104SH, 106SH, 107SH/SH B, 204SH, 841SH/SH s, 842SH, 941P, 942P, 943SH, 944SH, 945SH/G, DM010SH, DM011SH, DM012SH, DM013SH, 006Z, 007Z, 005HW, 101SB, C01HW, C02HW, C01LC, C02LC

    • Y!mobile 対象機種

      WX02S, HX008ZT, HX009ZT, WX02S-H, WX04K, WX04SH, WX05SH, WX06K, 005SH, 007HW, 007Z D01HW, D01NE, D01NX, D01NXII, D02HW, D02NE, D02OP, D03HW, D11LC, D12HW, D12LC, D21HW, D21LC, D21NE, D22HW, D23HW, D24HW, D25HW, D26HW, D31HW, D32HW, D33HW, D41HW, GL03D, H11HW, H11LC, H11T, H12HW, H31IA, S01SH, S01SHⅡ, S11HT, S12HT, S21HT, S22HT, S31HT, S51SE, 302HW, GL07S, GD01, GD03W, GP01, GP02, GP03, GS01, GS02, GS03, S31HW, S41HW, S42HW, 007Z

2015-12-09

Firefox OS stop developing

iOS 9.2 released