User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b4) Gecko/20050908 Firefox/1.4 Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b4) Gecko/20050908 Firefox/1.4 I get a security error when trying to access window.alert through a sandbox with evalInSandbox on ebay.com, but not on other domains. The sandbox's codebase is set to the URL of _content. And I am accessing alert through something like window.alert("hi") where window is sandbox.window = _content. Here it is in code: var box = new Components.utils.Sandbox(url); box.window = _content; Components.utils.evalInSandbox("window.alert('hello from: ' + window.location.href)", box); Reproducible: Always Steps to Reproduce: 1. Drop the attachment into <installdir>/components/ and have Firefox autoregister 2. You should get alerts with the URL of every non-chrome window loaded 3. navigate to http://google.com, note alert 4. navigate to http://yahoo.com, note alert 5. navigate to http://ebay.com, note no alert from ebay.com (the one from doubleclick doesn't count, we're looking for the one from the main page, not the ad iframe). open JS console and note the security error. Actual Results: Security error in JS console: 'Permission denied to get property Window.alert' Expected Results: alert box with: "hello from http://www.ebay.com" I'm putting this as Major because it prevents Greasemonkey from working properly on all sites. Its major to me anyway.
Created attachment 195602 [details] testcase that demonstrates the issue forgot the testcase attachment when i filed the bug
Felt like I should add the entire text of the error from the console incase it's not easy to reproduce using my testcase: Error: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMLocation.replace]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: file:///C:/PROGRA~1/DEERPA~3/components/ypSandboxTestCase.js :: <TOP_LEVEL> :: line 34" data: no] Source File: file:///C:/PROGRA~1/DEERPA~3/components/ypSandboxTestCase.js Line: 34
Actually, doesn't work on yahoo either - same problem. Looks like yahoo.com also sets it's document.domain property.
mrbkap, this one looks like yours, at a glance. /be
It's currently impossible to do what you want in the face of setting document.domain. To fix this, we're extending the interface of evalInSandbox to allow you to pass a window instead of a URI, which will have all of the right principals on it. That would make the interesting bit in the testcase: var sandbox = new Components.utils.Sandbox(webProgress.DOMWindow); ...
Created attachment 195822 [details] [diff] [review] Allow windows too This allows you to pass a DOMWindow to the Sandbox constructor. diff -w for review in a second.
That solution is totally fine with me.
Created attachment 195823 [details] [diff] [review] Allow windows too -w
Comment on attachment 195823 [details] [diff] [review] Allow windows too -w r=me if you use do_QueryWrappedNative instead of rolling your own, as you pointed out to me! /be
Comment on attachment 195823 [details] [diff] [review] Allow windows too -w >+ nsCOMPtr<nsIDOMWindow> win = do_QueryInterface(wrapper->Native()); >+ CallQueryInterface(win, &sop); Note to self: CallQueryInterface isn't null-safe, so this needs to check |win|.
Comment on attachment 195823 [details] [diff] [review] Allow windows too -w sr=shaver
Fix checked into trunk.
Fix checked into MOZILLA_1_8_BRANCH.