Closed Bug 1028609 Opened 10 years ago Closed 10 years ago

Intermittent browser_inspector_infobar.js | Test timed out | Found a tab after previous test timed out: http://example.com/browser/browser/devtools/inspector/test/browser_inspector_infobar.html

Categories

(DevTools :: Inspector, defect)

x86_64
Linux
defect
Not set
normal

Tracking

(firefox31 unaffected, firefox32 unaffected, firefox33 affected, firefox-esr24 unaffected)

RESOLVED FIXED
Firefox 33
Tracking Status
firefox31 --- unaffected
firefox32 --- unaffected
firefox33 --- affected
firefox-esr24 --- unaffected

People

(Reporter: KWierso, Assigned: miker)

References

(Depends on 1 open bug)

Details

(Keywords: intermittent-failure)

Attachments

(3 files)

https://tbpl.mozilla.org/php/getParsedLog.php?id=42219839&tree=Mozilla-Inbound
Ubuntu VM 12.04 x64 mozilla-inbound debug test mochitest-devtools-chrome-1 on 2014-06-21 16:25:51 PDT for push 6da364bc0e3e

slave: tst-linux64-spot-307



17:07:42     INFO -  --DOMWINDOW == 132 (0x7fdd11dd2c00) [pid = 1785] [serial = 4273] [outer = (nil)] [url = chrome://browser/content/devtools/inspector/inspector.xul]
17:07:42     INFO -  --DOMWINDOW == 131 (0x7fdd0443bc00) [pid = 1785] [serial = 4219] [outer = (nil)] [url = chrome://browser/content/devtools/inspector/inspector.xul]
17:07:42     INFO -  --DOMWINDOW == 130 (0x7fdd06de6400) [pid = 1785] [serial = 4584] [outer = (nil)] [url = chrome://browser/content/devtools/inspector/inspector.xul]
17:07:42     INFO -  --DOMWINDOW == 129 (0x7fdd03227c00) [pid = 1785] [serial = 4405] [outer = (nil)] [url = chrome://browser/content/devtools/inspector/inspector.xul]
17:07:42     INFO -  --DOMWINDOW == 128 (0x7fdd03ee6000) [pid = 1785] [serial = 4541] [outer = (nil)] [url = chrome://browser/content/devtools/inspector/inspector.xul]
17:07:42     INFO -  --DOMWINDOW == 127 (0x7fdd04523c00) [pid = 1785] [serial = 4064] [outer = (nil)] [url = chrome://browser/content/devtools/inspector/inspector.xul]
17:07:42     INFO -  --DOMWINDOW == 126 (0x7fdd0516ec00) [pid = 1785] [serial = 3927] [outer = (nil)] [url = chrome://browser/content/devtools/inspector/inspector.xul]
17:07:42     INFO -  --DOMWINDOW == 125 (0x7fdd03290000) [pid = 1785] [serial = 3953] [outer = (nil)] [url = chrome://browser/content/devtools/framework/toolbox.xul]
17:07:42     INFO -  --DOMWINDOW == 124 (0x7fdd033b8000) [pid = 1785] [serial = 3956] [outer = (nil)] [url = chrome://browser/content/devtools/inspector/inspector.xul]
17:07:42     INFO -  --DOMWINDOW == 123 (0x7fdd14611000) [pid = 1785] [serial = 4146] [outer = (nil)] [url = chrome://browser/content/devtools/inspector/inspector.xul]
17:07:42     INFO -  --DOMWINDOW == 122 (0x7fdd2914d000) [pid = 1785] [serial = 4038] [outer = (nil)] [url = chrome://browser/content/devtools/layoutview/view.xhtml]
17:07:42     INFO -  --DOMWINDOW == 121 (0x7fdd03224400) [pid = 1785] [serial = 4402] [outer = (nil)] [url = chrome://browser/content/devtools/framework/toolbox.xul]
17:07:42     INFO -  --DOMWINDOW == 120 (0x7fdd1438e400) [pid = 1785] [serial = 3969] [outer = (nil)] [url = chrome://browser/content/devtools/spectrum-frame.xhtml]
17:07:42     INFO -  --DOMWINDOW == 119 (0x7fdd04543400) [pid = 1785] [serial = 4430] [outer = (nil)] [url = chrome://browser/content/devtools/markup-view.xhtml]
17:07:42     INFO -  --DOMWINDOW == 118 (0x7fdd0717d400) [pid = 1785] [serial = 3882] [outer = (nil)] [url = chrome://browser/content/devtools/styleeditor.xul]
17:07:42     INFO -  --DOMWINDOW == 117 (0x7fdd1613b000) [pid = 1785] [serial = 3939] [outer = (nil)] [url = data:text/html;charset=utf8,<!DOCTYPE%20html><html%20dir='ltr'>%20%20<head>%20%20%20%20<style>%20%20%20%20%20%20html,%20body%20{%20height:%20100%;%20}%20%20%20%20%20%20body%20{%20margin:%200;%20overflow:%20hidden;%20}%20%20%20%20%20%20.CodeMirror%20{%20width:%20100%;%20height:%20100%%20!important;%20line-height:%201.25%20!important;}%20%20%20%20</style>%20%20%20%20<link%20rel='stylesheet'%20href='chrome://browser/skin/devtools/common.css'>%20%20%20%20<link%20rel='stylesheet'%20href='chrome://browser/content/devtools/codemirror/codemirror.css'>%20%20%20%20<link%20rel='stylesheet'%20href='chrome://browser/content/devtools/codemirror/dialog.css'>%20%20%20%20<link%20rel='stylesheet'%20href='chrome://browser/content/devtools/codemirror/mozilla.css'>%20%20</head>%20%20<body%20class='theme-body%20devtools-monospace'></body></html>]
17:07:42     INFO -  --DOMWINDOW == 116 (0x7fdd3a251400) [pid = 1785] [serial = 4492] [outer = (nil)] [url = chrome://browser/content/devtools/spectrum-frame.xhtml]
17:07:42     INFO -  --DOMWINDOW == 115 (0x7fdd11cdf000) [pid = 1785] [serial = 4076] [outer = (nil)] [url = data:text/html;charset=utf8,<!DOCTYPE%20html><html%20dir='ltr'>%20%20<head>%20%20%20%20<style>%20%20%20%20%20%20html,%20body%20{%20height:%20100%;%20}%20%20%20%20%20%20body%20{%20margin:%200;%20overflow:%20hidden;%20}%20%20%20%20%20%20.CodeMirror%20{%20width:%20100%;%20height:%20100%%20!important;%20line-height:%201.25%20!important;}%20%20%20%20</style>%20%20%20%20<link%20rel='stylesheet'%20href='chrome://browser/skin/devtools/common.css'>%20%20%20%20<link%20rel='stylesheet'%20href='chrome://browser/content/devtools/codemirror/codemirror.css'>%20%20%20%20<link%20rel='stylesheet'%20href='chrome://browser/content/devtools/codemirror/dialog.css'>%20%20%20%20<link%20rel='stylesheet'%20href='chrome://browser/content/devtools/codemirror/mozilla.css'>%20%20</head>%20%20<body%20class='theme-body%20devtools-monospace'></body></html>]
17:07:42     INFO -  --DOMWINDOW == 114 (0x7fdd04331000) [pid = 1785] [serial = 3798] [outer = (nil)] [url = about:blank]
17:07:47     INFO -  Xlib:  extension "RANDR" missing on display ":0".
17:07:48     INFO -  TEST-INFO | screentopng: exit 0
17:07:48  WARNING -  TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/devtools/inspector/test/browser_inspector_infobar.js | Test timed out
17:07:48     INFO -  TEST-INFO | MEMORY STAT vsize after test: 1484152832
17:07:48     INFO -  TEST-INFO | MEMORY STAT residentFast after test: 579035136
17:07:48     INFO -  TEST-INFO | MEMORY STAT heapAllocated after test: 163992584
17:07:48     INFO -  INFO TEST-END | chrome://mochitests/content/browser/browser/devtools/inspector/test/browser_inspector_infobar.js | finished in 45272ms
17:07:48  WARNING -  TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/devtools/inspector/test/browser_inspector_infobar.js | Found a tab after previous test timed out: http://example.com/browser/browser/devtools/inspector/test/browser_inspector_infobar.html
17:07:48     INFO -  --DOCSHELL 0x7fdd00beb800 == 29 [pid = 1785] [id = 2069]
17:07:48     INFO -  --DOCSHELL 0x7fdcffd21800 == 28 [pid = 1785] [id = 2064]
17:07:48     INFO -  --DOCSHELL 0x7fdcffb1a800 == 27 [pid = 1785] [id = 2065]
17:07:48     INFO -  --DOCSHELL 0x7fdd068d0800 == 26 [pid = 1785] [id = 2071]
17:07:48     INFO -  --DOCSHELL 0x7fdd00bdb000 == 25 [pid = 1785] [id = 2066]
17:07:48     INFO -  --DOCSHELL 0x7fdd00bdc000 == 24 [pid = 1785] [id = 2067]
17:07:48     INFO -  --DOCSHELL 0x7fdd00bdd000 == 23 [pid = 1785] [id = 2068]
17:07:48     INFO -  --DOCSHELL 0x7fdcfb01d800 == 22 [pid = 1785] [id = 2062]
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_TRUE(mMutable) failed: file /builds/slave/m-in-l64-d-0000000000000000000/build/netwerk/base/src/nsSimpleURI.cpp, line 265
17:07:48     INFO -  ++DOCSHELL 0x7fdcfa2fa000 == 23 [pid = 1785] [id = 2075]
17:07:48     INFO -  ++DOMWINDOW == 115 (0x7fdcfa2a9800) [pid = 1785] [serial = 4779] [outer = (nil)]
17:07:48     INFO -  ++DOMWINDOW == 116 (0x7fdcfab06400) [pid = 1785] [serial = 4780] [outer = 0x7fdcfa2a9800]
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_TRUE(mMutable) failed: file /builds/slave/m-in-l64-d-0000000000000000000/build/netwerk/base/src/nsSimpleURI.cpp, line 265
17:07:48     INFO -  TEST-INFO | checking window state
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_SUCCESS(EnsureScriptEnvironment(), nullptr) failed with result 0x80040111: file /builds/slave/m-in-l64-d-0000000000000000000/build/docshell/base/nsDocShell.cpp, line 4147
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_SUCCESS(EnsureScriptEnvironment(), nullptr) failed with result 0x80040111: file /builds/slave/m-in-l64-d-0000000000000000000/build/docshell/base/nsDocShell.cpp, line 4147
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_SUCCESS(EnsureScriptEnvironment(), nullptr) failed with result 0x80040111: file /builds/slave/m-in-l64-d-0000000000000000000/build/docshell/base/nsDocShell.cpp, line 4147
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_SUCCESS(EnsureScriptEnvironment(), nullptr) failed with result 0x80040111: file /builds/slave/m-in-l64-d-0000000000000000000/build/docshell/base/nsDocShell.cpp, line 4147
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_SUCCESS(EnsureScriptEnvironment(), nullptr) failed with result 0x80040111: file /builds/slave/m-in-l64-d-0000000000000000000/build/docshell/base/nsDocShell.cpp, line 4147
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_SUCCESS(EnsureScriptEnvironment(), nullptr) failed with result 0x80040111: file /builds/slave/m-in-l64-d-0000000000000000000/build/docshell/base/nsDocShell.cpp, line 4147
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_SUCCESS(EnsureScriptEnvironment(), nullptr) failed with result 0x80040111: file /builds/slave/m-in-l64-d-0000000000000000000/build/docshell/base/nsDocShell.cpp, line 4147
17:07:48     INFO -  [1785] WARNING: NS_ENSURE_SUCCESS(EnsureScriptEnvironment(), nullptr) failed with result 0x80040111: file /builds/slave/m-in-l64-d-0000000000000000000/build/docshell/base/nsDocShell.cpp, line 4147
17:07:48     INFO -  console.error:
17:07:48     INFO -  Object
17:07:48     INFO -    - prototype Object
17:07:48     INFO -      - columnNumber = 0
17:07:48     INFO -      - data = null
17:07:48     INFO -      - filename = resource://gre/modules/devtools/LayoutHelpers.jsm
17:07:48     INFO -      - inner = null
17:07:48     INFO -      - lineNumber = 20
17:07:48     INFO -      - location = {"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/devtools/LayoutHelpers.jsm","name":"LayoutHelpers","lineNumber":20,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/actors/inspector.js","name":"DocumentWalker","lineNumber":2780,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/actors/inspector.js","name":"documentWalker","lineNumber":2762,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/actors/inspector.js","name":"WalkerActor<.parentNode","lineNumber":1116,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/actors/inspector.js","name":"exports.NodeActor<.form","lineNumber":213,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/protocol.js","name":"types.addActorType/type<.write","lineNumber":275,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/protocol.js","name":"types.addArrayType/<.write","lineNumber":182,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/protocol.js","name":"Arg<.write","lineNumber":411,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/protocol.js","name":"Request<.write/str<","lineNumber":583,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/protocol.js","name":"Request<.write","lineNumber":580,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/protocol.js","name":"Actor<._sendEvent","lineNumber":833,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/protocol.js","name":"Actor<.initialize/<","lineNumber":821,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/event/core.js","name":"emit","lineNumber":96,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/actors/inspector.js","name":"WalkerActor<._onReflows","lineNumber":1002,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/event-emitter.js","name":"EventEmitter_emit","lineNumber":136,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/actors/layout.js","name":"LayoutChangesObserver.prototype<._startEventLoop","lineNumber":282,"sourceLine":"","caller":{"language":2,"languageName":"JavaScript","filename":"resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/timers.js","name":"notify","lineNumber":40,"sourceLine":"","caller":{"language":0,"languageName":"C++","filename":null,"name":null,"lineNumber":0,"sourceLine":"","caller":null}}}}}}}}}}}}}}}}}}
17:07:48     INFO -      - message =
17:07:48     INFO -      - name = NS_NOINTERFACE
17:07:48     INFO -      - result = 2147500034
17:07:48     INFO -    - prototype Object
17:07:48     INFO -  TEST-START | chrome://mochitests/content/browser/browser/devtools/inspector/test/browser_inspector_initialization.js
On inbound, this seems to have started in this merge from m-c https://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?startID=45168&endID=45169

The only commit in this merge that mentions the inspector is bug 1028043.

Patrick, any ideas?
Flags: needinfo?(pbrosset)
Bug 1028043 is probably not the culprit here. It basically only removed unused variables. So if it was the problem, it would probably have introduced permanent failures.
Looking at the merge commit, I can see  Bug 1003569 which touched the infobar.
Mike, any idea what could have caused this?
Flags: needinfo?(pbrosset) → needinfo?(mratcliffe)
It fails after:
17:07:10     INFO -  TEST-PASS | chrome://mochitests/content/browser/browser/devtools/inspector/test/browser_inspector_infobar.js | Infobar is inside the content window (top = 496, content = 'DIV#farbottom500 x 100')

Which is:
yield selectNode("#abovetop", inspector);
let positioner = getPositioner();
let insideContent = parseInt(positioner.style.top, 10) >= -DOORHANGER_ARROW_HEIGHT;
ok(insideContent, "Infobar is inside the content window (top = " +
                    parseInt(positioner.style.top, 10) + ", content = '" +
                    positioner.textContent +"')");

So for some reason "yield selectNode("#abovetop", inspector)" is occasionally failing to highlight #abovetop and remains on the previous node.

This is similar to other issues I have been having with tests. Seems like we are emitting something at the wrong time or async promises are causing us problems.
Flags: needinfo?(mratcliffe)
Assignee: nobody → mratcliffe
Status: NEW → ASSIGNED
I see it failing in 'checkInfoBarBelowFindbar', from some of the logs I've read, 'checkInfoBarAboveTop' seems to be executed correctly, but it indeed gets stuck after 'yield selectNode(farBottom, inspector);' in 'checkInfoBarBelowFindbar'.
And from the log, at the exact place, there's an error being thrown: 

console.error:
  Message: TypeError: this._elementStyle.rules is undefined
  Stack:
    CssRuleView.prototype._createEditors@resource://gre/modules/commonjs/toolkit/loader.js -> resource:///modules/devtools/styleinspector/rule-view.js:1626:14
CssRuleView.prototype._populate/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource:///modules/devtools/styleinspector/rule-view.js:1510:7
resolve@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/deprecated-sync-thenables.js:40:11
then@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/deprecated-sync-thenables.js:20:43
resolve@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/deprecated-sync-thenables.js:72:11
resolve@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/deprecated-sync-thenables.js:40:11
Handler.prototype.process@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:863:11
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:742:7

So for some reason, switching to this node causes an error in the rule-view.
There should always be rules, even after this._clearRules() has been called. This does seem to appear whenever we have this failure.

It seems like destroy calls clear(), which sets this._elementStyle to null. We then try to reuse the half destroyed rule-view.

Added code to return if this._elementStyle.rules === undefined.

I have also added lots of logging etc. that should help us hunt this down:
https://tbpl.mozilla.org/?tree=Try&rev=71c0f186f5d8
And checking for this._elementStyle.rules === undefined
Returning when !this._elementStyle.rules is a quick workaround to fix this orange.

The problem is caused by the ruleview being called when partially destroyed. At some future point we should try to understand exactly why this is happening (probably a promise returning after destroy() has been called).
Attachment #8445072 - Flags: review?(pbrosset)
Comment on attachment 8445072 [details] [diff] [review]
check-for-undefined-style-rules-in-rule-view-1028609.patch

Review of attachment 8445072 [details] [diff] [review]:
-----------------------------------------------------------------

Since this orange is getting really frequent, let's go with that fix. 
Can you file another bug so we don't forget to fix the actual underlying issue?
Attachment #8445072 - Flags: review?(pbrosset) → review+
(In reply to Patrick Brosset [:pbrosset] [:patrick] from comment #57)
> Comment on attachment 8445072 [details] [diff] [review]
> check-for-undefined-style-rules-in-rule-view-1028609.patch
> 
> Review of attachment 8445072 [details] [diff] [review]:
> -----------------------------------------------------------------
> 
> Since this orange is getting really frequent, let's go with that fix. 
> Can you file another bug so we don't forget to fix the actual underlying
> issue?

Bug 1030033 logged
https://hg.mozilla.org/mozilla-central/rev/da15cd957a2c
Status: ASSIGNED → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Whiteboard: [fixed-in-fx-team]
Target Milestone: --- → Firefox 33
Looks like we're still hitting this.
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Target Milestone: Firefox 33 → ---
A race condition due to a missing function parameter in setNode (which selects a node without highlighting it unless you pass in the extra parameter).

I am surprised that this test ever worked.

I have created highlightNode() to make this more intuitive in the future.

Try:
https://tbpl.mozilla.org/?tree=Try&rev=739b373d98e4
Attachment #8446573 - Flags: review?(pbrosset)
Comment on attachment 8446573 [details] [diff] [review]
infobar-timing-out-1028609.patch

Review of attachment 8446573 [details] [diff] [review]:
-----------------------------------------------------------------

I have some comments about adding and naming functions in the various head.js.
Other than this, if this fixes the intermittent, let's go for it.
Let me know what you think about my comments and I'll quickly R+ this.

::: browser/devtools/inspector/test/head.js
@@ +95,5 @@
> + *        The instance of InspectorPanel currently loaded in the toolbox
> + * @return a promise that resolves when the inspector is updated with the new
> + * node
> + */
> +function highlightNode(nodeOrSelector, inspector) {

I think selectAndHighlightNode would be a better name, since the node ends up being selected too.

@@ +128,5 @@
> + *        node upon selection
> + * @return a promise that resolves when the inspector is updated with the new
> + * node
> + */
> +function selectOrHighlightNode(nodeOrSelector, inspector, reason) {

nit: I don't know if selectOrHighlightNode is the best name for this. There are no cases where the node will only be highlighted and not selected.
Also, why did you not keep selectNode as it was, and add highlightNode such that:

highlightNode(nodeOrSelector, inspector) {
  return selectNode(nodeOrSelector, inspector, "test-highlight");
}

This would avoid adding a new function and choosing a name for it.

Personally, I would have even not added any new function, and simply replace the occurrences of 'selectNode(node, inspector)' in the code with 'selectNode(node, inspector, "test-highlight")' wherever needed, but I guess adding a new function named selectAndHighlightNode helps with reading tests.
Attachment #8446573 - Flags: review?(pbrosset)
Disabling this test for now as it is too frequent:
https://hg.mozilla.org/integration/fx-team/rev/f73f82dd7b17
Attachment #8447870 - Flags: review+
Attachment #8447870 - Flags: checkin+
Attachment #8447870 - Attachment is patch: true
Attachment #8447870 - Attachment mime type: application/x-javascript → text/plain
https://hg.mozilla.org/mozilla-central/rev/f73f82dd7b17
Status: REOPENED → RESOLVED
Closed: 10 years ago10 years ago
Resolution: --- → FIXED
Target Milestone: --- → Firefox 33
Product: Firefox → DevTools
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: