Weitere ähnliche Inhalte
Ähnlich wie バッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだった (20)
Mehr von Masami Yabushita (19)
バッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだった
- 2. 自己紹介
• 名前 藪下 正美
• 会社 株式会社グローバルサイバーグル
ープ
• どんな人?
– @aoi_nagatsuki
– プログラミング言語とかスマホとか好き
- 11. manifestからいろいろ読み込む
•
applicationinstallのリスナ内で
•
```javascript:backgorund_service.js
• var appapp = evt.detail.application;
var = evt.detail.application;
•
```
•
なappで
•
```javascript:backgorund_service.js
• var url = origin + app.manifest.background_page;
var url = origin + app.manifest.background_page;
• open(manifestURL,AUTO_OPEN_BG_PAGE_NAME, url);
open(manifestURL, AUTO_OPEN_BG_PAGE_NAME,
•
```
•
•
•
url);
な感じの処理をしている。
background_pageにはバックグラウンド動作させたいhtmlのURLが入る。
他にもアプリ名とかとっている
- 13. frameって何者
•
framesに入るのはiframe
–
以下のようなオブジェクトが入ってるっぽい
• ```javascript
frame: {
• 'mozbrowser': 'mozbrowser',
frame: {
•
'mozbrowser': 'mozbrowser',
'mozapp': manifestURL, // アプリのマニフェストのURL
•
'mozapp': manifestURL, // アプリのマニフェストのURL
'name': name, // アプリ名
•
'name': name, // アプリ名
• 'remote': true,
'remote': true,
• 'src': url, // バックグラウンド動作するHTMLのURL
'src': url, // バックグラウンド動作するHTMLのURL
• 'className': 'backgroundWindow',
'className': 'backgroundWindow',
•
'dataset':
'dataset': { {
•
'frameType': 'background',
'frameType': 'background',
•
'frameName': name
• 'frameName': name
}
• } }
• ```
}
- 15. addEventListner再掲
•
systemアプリが起動するときにbackground_service.jsの
BackgroundServiceManagerがwidnowオブジェクトにいくつかイベン
トを登録する
•
•
```
window.addEventListener('mozbrowseropenwindow',
function bsm_winopen(evt) {
•window.addEventListener('mozbrowseropenwindow', function
window.addEventListener('mozbrowserclose', function
bsm_winclose(evt) {
bsm_winopen(evt) {
•window.addEventListener('mozbrowserclose', function bsm_winclose(evt) {
window.addEventListener('mozbrowsererror', function
bsm_winclose(evt) {
window.addEventListener('mozbrowsererror', function bsm_winclose(evt) {
•window.addEventListener('applicationinstall', function bsm_oninstall(evt) {
window.addEventListener('applicationinstall', function
bsm_oninstall(evt) {
window.addEventListener('applicationuninstall', function bsm_oninstall(evt) {
•
window.addEventListener('applicationuninstall', function
bsm_oninstall(evt) {
• ```
- 23. Mozbrowseropenwindow
から掘り下げる
•
```cpp:gecko/dom/browser-element/BrowserElementParent.cpp
•
customEvent->InitCustomEvent(aEventName,
•customEvent->InitCustomEvent(aEventName,
/* bubbles = */ true,
/* bubbles = */ true, false,
•
/* cancelable = */
/* cancelable = */ false,
•
detailVariant);
detailVariant);
•
customEvent->SetTrusted(true);
• customEvent->SetTrusted(true);
// Dispatch the event.
• // Dispatch the event.
nsEventStatus status = nsEventStatus_eIgnore;
• nsEventStatus status = nsEventStatus_eIgnore;
rv = nsEventDispatcher::DispatchDOMEvent(aFrameElement,
rv = nsEventDispatcher::DispatchDOMEvent(aFrameElement, nullptr,
nullptr,
domEvent, presContext, &status);
•
domEvent, presContext, &status);
•
```
•
カスタムイベントオブジェクトを作ってDispatchDOMEventしている
- 24. イベントのディスパッチの流れ
• DispatchCustomDOMEventで呼ばれている
nsEventDispatcher::DispatchDOMEventから
•
```cpp:gecko/content/events/src/nsEventDispatcher.cpp
• return nsEventDispatcher::Dispatch(aTarget,
return nsEventDispatcher::Dispatch(aTarget,
aPresContext, innerEvent,
aPresContext, innerEvent,
•
aDOMEvent, aEventStatus);
aDOMEvent, aEventStatus);
• } else if (aEvent) {
} else if (aEvent) {
• return nsEventDispatcher::Dispatch(aTarget,
return nsEventDispatcher::Dispatch(aTarget,
aPresContext, aEvent,
aPresContext, aEvent,
•
aDOMEvent, aEventStatus);
aDOMEvent, aEventStatus);
•
```
• こんなかんじでDispatchが呼ばれて
- 25. イベントのディスパッチの流れ
•
```cpp:gecko/content/events/src/nsEventDispatcher.cpp
• /* static */ nsresult
/* nsEventDispatcher::Dispatch(nsISupports* aTarget,
• static */ nsresult
nsEventDispatcher::Dispatch(nsISupports* aTarget,
•
nsPresContext* aPresContext,
nsPresContext* aPresContext,
•
nsEvent* aEvent,
nsEvent* aEvent,
•
nsIDOMEvent* aDOMEvent,
nsIDOMEvent* aDOMEvent,
•
nsEventStatus* aEventStatus,
nsEventStatus* aEventStatus,
•
nsDispatchingCallback* aCallback,
nsDispatchingCallback* aCallback,
•
nsCOMArray<nsIDOMEventTarget>*
nsCOMArray<nsIDOMEventTarget>* aTargets)
{ aTargets)
• めっちゃ長い!
{
}
•
めっちゃ長い!
• }
•
```