Upload
noritada-shimizu
View
1.043
Download
4
Embed Size (px)
DESCRIPTION
2014年4月9日にhtml5j自動車部で講演したスライドです。 Firefox OSにWebAPIを追加するためには何をすればいいかをまとめました。
Citation preview
清水智公(しみずのりただ)
• Mozilla Japan テクニカルマーケティング
• mozilla.jp の中の人 • 2013年4月より現職 • Twitter: @chikoski • http://slideshare.net/chikoski/
3
FFiirreeffooxx をよろしくね!
6
7
10
多数企業との共同開発・製品化
11
• 主要 18 キャリアが賛同 • チップ&端末メーカー • Qualcomm, ARM • ZTE, Alcatel, LG, Huawei, Sony
• Foxconn, Panasonic
各国で順次展開中
12
• スペイン、ポーランド • コロンビア、ベネズエラ • ドイツ、ブラジル、メキシコ、ペルー、ウルグアイ
• ハンガリー、ギリシャ、セルビア、モンテネグロ
• イタリア
• 商用端末3機種 • ZTE Open • Alcatel One Touch Fire • LG Fireweb • 開発端末 / PC • Geeksphone Keon /Peak • APC (VIA) Paper /Rock
発売中の端末
13
Firefox OS 端末販売状況
• ベネズエラ(Telefónica@2013/10)スマートフォン販売の12%
• コロンビア(Telefónica@2013/10) スマートフォン販売の9%
• ウルグアイ(Movistar@2013/12) スマートフォン販売の30%
14
15
ハードウェア 最小構成
CPU 1GHz, single-core, ARM Cortex A5 互換
ストレージ 汎用:オンボード256MB、スマホ:トータルで4G
システムRAM 128MB
ディスプレイ 262K色、HVGA、マルチタッチ(2点は必要)
GPU WebGLが利用可能、H.264動画を30FPSで描画可能
物理ボタン ホーム、電源、ボリューム
16
ハードウェア サポートしているバージョン
チップセット Qualcomm 7727, 7727A, 8210, 8212, 8225, 8926
Spreadtrum SC6821, SC7710, SC7715
解像度 HVGA, WVGA, FWVGA, 720P
NFC Broadcom 20793S NFC Controller
GPS A-GPS
ハードウェア コードネーム CPU RAM ROM
Alcatel One Touch Fire hamachi, buri Qualcomm MSM 7227A 1GHZ 256MB 512MB
ZTE Open ikura Qualcomm MSM 7225A 800Mhz 256MB 512MB
LG Fireweb leo Qualcomm 1GHz 512MB 4GB
Nexus4 nexus-4 Qualcomm Snapdragon S4Pro 1.5GHz quad-core 2GB 8 /
16GBFoxconn InFocus flatfish A31(Arm Coretex A7)
Quad-Core 1.0GHz 2GB 16GB
Spreadtrum SC6821 tarako Coretex A5 1GHz 128MB 2GB
Flame the “reference device”
Qualcomm MSM8210 Snapdragon, 1.2GHz 2core
256MB - 1GB 8GB
18
Firefox OS vs Android
19
カーネル & HAL
Web Platform App Framework
!!
AndroidRuntime
Dalvik
WebKit
Java アプリ
ブラウザ アプリ
Native Library
Web アプリ
Web アプリ
Packaged Webアプリ
Gecko
DeviceAPI SystemAPIライブラリ
SGL etc.
Native Interface
カーネル & HAL
20
21
22
23
プロセス 説明
b2g Content process の親
rild Radio Interface Layerを提供
rildproxy rildのクライアント
netd ネットワークインタフェースを設定
wpa_supplicant WPAのサプリカント
dbus_daemon DBUSを提供。Bluetooth通信に利用
sysfsの利用例
FILE *capacityFile =
fopen("/sys/class/power_supply/battery/capacity", "r");
double capacity = dom::battery::kDefaultLevel * 100;
if (capacityFile) {
fscanf(capacityFile, "%lf", &capacity);
fclose(capacityFile);
}
24
• Hosted (Web 読み込み型) • 従来のWebと同じ権限 • オフライン対応アプリも開発可能 • Packaged (ダウンロード型) • 従来のスマホアプリに相当 • Hostedアプリの権限+ 追加権限 • マーケット審査
Firefox OSアプリ
25
Packaged Web アプリ
HostedWeb アプリ
• Firefox OS の管理するリソースに対する操作
• ハードウェアの操作 • 通知のコントロール • etc • JavaScript から呼び出す
Web API
26
現在提供されているWeb API
• コミュニケーションNetwork Information API, Bluetooth, Mobile Connection API, Network Stats API, TCP Socket API, Telephony, WebSMS, WiFi Information API
• ハードウェアアクセスAmbient Light Sensor API, Battery Status API, Geolocation API, Pointer Lock API, Proximity API, Device Orientation API, Screen Orientation API, Vibration API, WebFM API, Camera API, Power Management API
27
現在提供されているWeb API(つづき)
• データ管理FileHandle API, IndexedDB, Contacts API, Device Storage API, Settings API
• その他Alarm API, Simple Push, Web Notifications, Apps API, Web Activities, WebPayment API, Browser API, Idle API, Permissions API, Time/Clock API
28
Vibration API
var pattern = [100,30,100,30,100,200,200,30,200,30,200,200, 100,30,100,30,100]; navigator.vibrate(pattern); // Vibrate 'SOS' in Morse.
29
30
Vibration API の WebIDL
partial interface Navigator {
boolean vibrate(unsigned long duration);
boolean vibrate( sequence<unsigned long> pattern);
};
31
Vibrate APIの実装
bool Navigator::Vibrate( const nsTArray<uint32_t>& aPattern){
// 諸々の確認作業。省略
hal::Vibrate(aPattern, mWindow);
return true;
}
32
gecko/hal/sandbox/SandboxHal.cpp
void Vibrate(const nsTArray<uint32_t>& pattern, const WindowIdentifier &id){
HAL_LOG(("Vibrate: Sending to parent process."));
AutoInfallibleTArray<uint32_t, 8> p(pattern);
WindowIdentifier newID(id);
newID.AppendProcessID();
Hal()->SendVibrate(p, newID.AsArray(), TabChild::GetFrom(newID.GetWindow()));
}
33
Geolocation API
var locator = navigator.geolocation;// locator は Geolocation オブジェクトlocator.getCurrentPosition(function(position){ doSomething(position.coords.latitude, position.coords.longitude);});
34
Geolocation.webidl[NoInterfaceObject]
interface Geolocation {
[Throws]
void getCurrentPosition(PositionCallback successCallback,
optional PositionErrorCallback? errorCallback = null,
optional PositionOptions options);
[Throws]
long watchPosition(PositionCallback successCallback,
optional PositionErrorCallback? errorCallback = null,
optional PositionOptions options);
! void clearWatch(long watchId);
};
35
dom/webidl/moz.build
WEBIDL_FILES = [
'AbstractWorker.webidl',
'ActivityRequestHandler.webidl',
'AnalyserNode.webidl',
'AnimationEvent.webidl',
(中略)
'Geolocation.webidl',
36
dom/bindings/Bindings.conf
'Geolocation': {
'headerFile': 'nsGeolocation.h'
},
37
dom/src/moz.build
DIRS += [
'jsurl',
'storage',
'offline',
'json',
'geolocation',
'notification',
]
38
dom/src/geolocation/nsGeolocation.h
namespace mozilla {
namespace dom {
class Geolocation;
typedef CallbackObjectHolder<PositionCallback, nsIDOMGeoPositionCallback> GeoPositionCallback;
typedef CallbackObjectHolder<PositionErrorCallback, nsIDOMGeoPositionErrorCallback> GeoPositionErrorCallback;
}
}
39
dom/src/geolocation/nsGeolocation.cpp
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Geolocation)
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMGeoGeolocation)
NS_INTERFACE_MAP_ENTRY(nsIDOMGeoGeolocation)
NS_INTERFACE_MAP_ENTRY(nsIGeolocationUpdate)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTING_ADDREF(Geolocation)
NS_IMPL_CYCLE_COLLECTING_RELEASE(Geolocation)
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_4(Geolocation,
mCachedPosition,
mPendingCallbacks,
mWatchingCallbacks,
mPendingRequests)
40
dom/src/geolocation/nsGeolocation.cpp
Geolocation::Geolocation(): mLastWatchId(0){
SetIsDOMBinding();
}
Geolocation::~Geolocation(){
if (mService) {
Shutdown();
}
}
nsresult Geolocation::Init(nsIDOMWindow* aContentDom){
// Remember the window
if (aContentDom) {
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aContentDom);
if (!window) {
41
dom/src/geolocation/nsGeolocation.cpp
Geolocation::WrapObject(JSContext *aCtx, JS::Handle<JSObject*> aScope){
return GeolocationBinding::Wrap(aCtx, aScope, this);
}
42
まとめ
43
44
ハードウェア 最小構成
CPU 1GHz, single-core, ARM Cortex A5 互換
ストレージ 汎用:オンボード256MB、スマホ:トータルで4G
システムRAM 128MB
ディスプレイ 262K色、HVGA、マルチタッチ(2点は必要)
GPU WebGLが利用可能、H.264動画を30FPSで描画可能
物理ボタン ホーム、電源、ボリューム
45
46
50
ご清聴ありがとうございました
51