| Left: | ||
| Right: |
| LEFT | RIGHT |
|---|---|
| 1 /* | 1 /* |
| 2 * This Source Code is subject to the terms of the Mozilla Public License | 2 * This Source Code is subject to the terms of the Mozilla Public License |
| 3 * version 2.0 (the "License"). You can obtain a copy of the License at | 3 * version 2.0 (the "License"). You can obtain a copy of the License at |
| 4 * http://mozilla.org/MPL/2.0/. | 4 * http://mozilla.org/MPL/2.0/. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * @module crawler | 8 * @module crawler |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 58 * | 58 * |
| 59 * @return {Promise.<tab>} promise which resolves once the tab is fully initia lized. | 59 * @return {Promise.<tab>} promise which resolves once the tab is fully initia lized. |
| 60 */ | 60 */ |
| 61 _createTab: function() | 61 _createTab: function() |
| 62 { | 62 { |
| 63 this._tabs++; | 63 this._tabs++; |
| 64 let tab = this._browser.addTab("about:blank"); | 64 let tab = this._browser.addTab("about:blank"); |
| 65 if (tab.linkedBrowser.outerWindowID) | 65 if (tab.linkedBrowser.outerWindowID) |
| 66 { | 66 { |
| 67 this._removeTabKeepingWindowAlive(); | 67 this._removeTabKeepingWindowAlive(); |
| 68 return Promise.resolve(tab); | 68 return Promise.resolve(tab); |
|
Wladimir Palant
2016/09/16 07:10:37
I think that rather than introducing a _removeTabK
sergei
2016/09/16 12:34:13
It's a valid point but I would like to keep it thi
| |
| 69 } | 69 } |
| 70 return new Promise((resolve, reject) => | 70 return new Promise((resolve, reject) => |
| 71 { | 71 { |
| 72 let onBrowserInit = (msg) => | 72 let onBrowserInit = (msg) => |
| 73 { | 73 { |
| 74 tab.linkedBrowser.messageManager.removeMessageListener("Browser:Init", o nBrowserInit); | 74 tab.linkedBrowser.messageManager.removeMessageListener("Browser:Init", o nBrowserInit); |
| 75 this._removeTabKeepingWindowAlive(); | 75 this._removeTabKeepingWindowAlive(); |
| 76 resolve(tab); | 76 resolve(tab); |
| 77 }; | 77 }; |
| 78 // "Browser:Init" message is sent once the browser is ready, see | 78 // "Browser:Init" message is sent once the browser is ready, see |
| 79 // https://bugzil.la/1256602#c1 | 79 // https://bugzil.la/1256602#c1 |
| 80 tab.linkedBrowser.messageManager.addMessageListener("Browser:Init", onBrow serInit); | 80 tab.linkedBrowser.messageManager.addMessageListener("Browser:Init", onBrow serInit); |
| 81 }); | 81 }); |
| 82 }, | 82 }, |
| 83 | |
|
Wladimir Palant
2016/09/16 07:10:37
Nit: Don't add this extra newline please.
sergei
2016/09/16 12:34:13
Done.
| |
| 84 | 83 |
| 85 /** | 84 /** |
| 86 * Returns a promise that will resolve into a tab once a tab is allocated. | 85 * Returns a promise that will resolve into a tab once a tab is allocated. |
| 87 * The tab cannot be used by other tasks until releaseTab() is called. | 86 * The tab cannot be used by other tasks until releaseTab() is called. |
| 88 * | 87 * |
| 89 * @result {Promise.<tab>} | 88 * @result {Promise.<tab>} |
| 90 */ | 89 */ |
| 91 getTab: function() | 90 getTab: function() |
| 92 { | 91 { |
| 93 if (this._tabs < this._maxtabs) | 92 if (this._tabs < this._maxtabs) |
| 94 return this._createTab(); | 93 return this._createTab(); |
| 95 return new Promise((resolve, reject) => this._resolvers.push(resolve)); | 94 return new Promise((resolve, reject) => this._resolvers.push(resolve)); |
| 96 }, | 95 }, |
| 97 | 96 |
| 98 /** | 97 /** |
| 99 * Adds a tab back to the pool so that it can be used by other tasks. | 98 * Adds a tab back to the pool so that it can be used by other tasks. |
| 100 * | 99 * |
| 101 * @param {tab} tab | 100 * @param {tab} tab |
| 102 */ | 101 */ |
| 103 releaseTab: function(tab) | 102 releaseTab: function(tab) |
| 104 { | 103 { |
| 105 // If we are about to close last tab don't close it immediately to keep | 104 // If we are about to close last tab don't close it immediately to keep |
| 106 // the window alive. It will be closed when a new tab is created. | 105 // the window alive. It will be closed when a new tab is created. |
| 107 if (this._tabs > 1) | 106 if (this._tabs > 1) |
| 108 this._browser.removeTab(tab); | 107 this._browser.removeTab(tab); |
| 109 else | 108 else |
| 110 { | 109 { |
| 111 // navigate away from early opened URL | 110 // navigate away from early opened URL |
| 112 tab.linkedBrowser.loadURI('about:blank', null, null); | 111 tab.linkedBrowser.loadURI('about:blank', null, null); |
|
Wladimir Palant
2016/09/16 07:10:37
What's the point of navigating away if we are igno
sergei
2016/09/16 12:34:13
I have a version when the crawler is always runnin
| |
| 113 this._tabKeepingWindowAlive = tab; | 112 this._tabKeepingWindowAlive = tab; |
| 114 } | 113 } |
| 115 | 114 |
| 116 this._tabs--; | 115 this._tabs--; |
| 117 if (this._resolvers.length && this._tabs < this._maxtabs) | 116 if (this._resolvers.length && this._tabs < this._maxtabs) |
| 118 { | 117 { |
| 119 this._resolvers.shift()(this._createTab()); | 118 this._resolvers.shift()(this._createTab()); |
| 120 } | 119 } |
| 121 }, | 120 }, |
| 122 }; | 121 }; |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 395 | 394 |
| 396 function reportException(e) | 395 function reportException(e) |
| 397 { | 396 { |
| 398 let stack = ""; | 397 let stack = ""; |
| 399 if (e && typeof e == "object" && "stack" in e) | 398 if (e && typeof e == "object" && "stack" in e) |
| 400 stack = e.stack + "\n"; | 399 stack = e.stack + "\n"; |
| 401 | 400 |
| 402 Cu.reportError(e); | 401 Cu.reportError(e); |
| 403 dump(e + "\n" + stack + "\n"); | 402 dump(e + "\n" + stack + "\n"); |
| 404 } | 403 } |
| LEFT | RIGHT |