mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 22:25:30 +00:00
merge mozilla-central to devtools
This commit is contained in:
commit
a93179831a
@ -8,6 +8,13 @@
|
||||
</targetApplication>
|
||||
</versionRange>
|
||||
</emItem>
|
||||
<emItem id="firefox@bandoo.com">
|
||||
<versionRange minVersion="5.0" maxVersion="5.0" severity="1">
|
||||
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
|
||||
<versionRange minVersion="3.7a1pre" maxVersion="*"/>
|
||||
</targetApplication>
|
||||
</versionRange>
|
||||
</emItem>
|
||||
<emItem id="langpack-vi-VN@firefox.mozilla.org">
|
||||
<versionRange minVersion="2.0" maxVersion="2.0"/>
|
||||
</emItem>
|
||||
@ -70,13 +77,27 @@
|
||||
</targetApplication>
|
||||
</versionRange>
|
||||
</emItem>
|
||||
<emItem id="{6E19037A-12E3-4295-8915-ED48BC341614}">
|
||||
<versionRange minVersion="0.1" maxVersion="1.3.328.4" severity="1">
|
||||
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
|
||||
<versionRange minVersion="3.7a1pre" maxVersion="*"/>
|
||||
</targetApplication>
|
||||
</versionRange>
|
||||
</emItem>
|
||||
<emItem id="{8CE11043-9A15-4207-A565-0C94C42D590D}"/>
|
||||
<emItem id="{AB2CE124-6272-4b12-94A9-7303C7397BD1}">
|
||||
<versionRange severity="1"/>
|
||||
<versionRange minVersion="0.1" maxVersion="5.2.0.7164" severity="1"/>
|
||||
</emItem>
|
||||
<emItem id="{B13721C7-F507-4982-B2E5-502A71474FED}">
|
||||
<versionRange severity="1"/>
|
||||
</emItem>
|
||||
<emItem id="{B7082FAA-CB62-4872-9106-E42DD88EDE45}">
|
||||
<versionRange minVersion="0.1" maxVersion="3.3.0.*">
|
||||
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
|
||||
<versionRange minVersion="3.7a1" maxVersion="*"/>
|
||||
</targetApplication>
|
||||
</versionRange>
|
||||
</emItem>
|
||||
<emItem id="{E8E88AB0-7182-11DF-904E-6045E0D72085}"/>
|
||||
</emItems>
|
||||
<pluginItems>
|
||||
@ -132,4 +153,36 @@
|
||||
</versionRange>
|
||||
</pluginItem>
|
||||
</pluginItems>
|
||||
<gfxItems>
|
||||
<gfxBlacklistEntry>
|
||||
<os>WINNT 6.1</os>
|
||||
<vendor>0x10de</vendor>
|
||||
<devices>
|
||||
<device>0x0a6c</device>
|
||||
</devices>
|
||||
<feature>DIRECT2D</feature>
|
||||
<featureStatus>BLOCKED_DRIVER_VERSION</featureStatus>
|
||||
<driverVersion>8.17.12.5896</driverVersion>
|
||||
<driverVersionComparator>LESS_THAN_OR_EQUAL</driverVersionComparator>
|
||||
</gfxBlacklistEntry>
|
||||
<gfxBlacklistEntry>
|
||||
<os>WINNT 6.1</os>
|
||||
<vendor>0x10de</vendor>
|
||||
<devices>
|
||||
<device>0x0a6c</device>
|
||||
</devices>
|
||||
<feature>DIRECT3D_9_LAYERS</feature>
|
||||
<featureStatus>BLOCKED_DRIVER_VERSION</featureStatus>
|
||||
<driverVersion>8.17.12.5896</driverVersion>
|
||||
<driverVersionComparator>LESS_THAN_OR_EQUAL</driverVersionComparator>
|
||||
</gfxBlacklistEntry>
|
||||
<gfxBlacklistEntry>
|
||||
<os>WINNT 5.1</os>
|
||||
<vendor>0x10de</vendor>
|
||||
<feature>DIRECT3D_9_LAYERS</feature>
|
||||
<featureStatus>BLOCKED_DRIVER_VERSION</featureStatus>
|
||||
<driverVersion>7.0.0.0</driverVersion>
|
||||
<driverVersionComparator>GREATER_THAN_OR_EQUAL</driverVersionComparator>
|
||||
</gfxBlacklistEntry>
|
||||
</gfxItems>
|
||||
</blocklist>
|
||||
|
@ -101,6 +101,13 @@ function Drag(item, event, isFauxDrag) {
|
||||
};
|
||||
|
||||
Drag.prototype = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [Drag (item)] for debug use
|
||||
toString: function Drag_toString() {
|
||||
return "[Drag (" + this.item + ")]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: snapBounds
|
||||
// Adjusts the given bounds according to the currently active trenches. Used by <Drag.snap>
|
||||
|
@ -281,6 +281,13 @@ function GroupItem(listOfEls, options) {
|
||||
|
||||
// ----------
|
||||
GroupItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [GroupItem id=id] for debug use
|
||||
toString: function GroupItem_toString() {
|
||||
return "[GroupItem id=" + this.id + "]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Variable: defaultName
|
||||
// The prompt text for the title field.
|
||||
@ -1792,6 +1799,13 @@ let GroupItems = {
|
||||
minGroupHeight: 110,
|
||||
minGroupWidth: 125,
|
||||
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [GroupItems] for debug use
|
||||
toString: function GroupItems_toString() {
|
||||
return "[GroupItems count=" + this.groupItems.length + "]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: init
|
||||
init: function GroupItems_init() {
|
||||
|
@ -186,6 +186,23 @@ function iQClass(selector, context) {
|
||||
|
||||
iQClass.prototype = {
|
||||
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [iQ...] for debug use
|
||||
toString: function iQClass_toString() {
|
||||
if (this.length > 1) {
|
||||
if (this.selector)
|
||||
return "[iQ (" + this.selector + ")]";
|
||||
else
|
||||
return "[iQ multi-object]";
|
||||
}
|
||||
|
||||
if (this.length == 1)
|
||||
return "[iQ (" + this[0].toString() + ")]";
|
||||
|
||||
return "[iQ non-object]";
|
||||
},
|
||||
|
||||
// Start with an empty selector
|
||||
selector: "",
|
||||
|
||||
|
@ -854,6 +854,13 @@ Item.prototype = {
|
||||
// Class: Items
|
||||
// Keeps track of all Items.
|
||||
let Items = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [Items] for debug use
|
||||
toString: function Items_toString() {
|
||||
return "[Items]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Variable: defaultGutter
|
||||
// How far apart Items should be from each other and from bounds
|
||||
|
@ -41,6 +41,13 @@ Cu.import("resource://gre/modules/Services.jsm");
|
||||
let EXPORTED_SYMBOLS = ["AllTabs"];
|
||||
|
||||
let AllTabs = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [AllTabs] for debug use
|
||||
toString: function AllTabs_toString() {
|
||||
return "[AllTabs]";
|
||||
},
|
||||
|
||||
/**
|
||||
* Get an array of all tabs from all tabbrowser windows.
|
||||
*
|
||||
|
@ -74,6 +74,13 @@ function Point(a, y) {
|
||||
};
|
||||
|
||||
Point.prototype = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [Point (x,y)] for debug use
|
||||
toString: function Point_toString() {
|
||||
return "[Point (" + this.x + "," + this.y + ")]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: distance
|
||||
// Returns the distance from this point to the given <Point>.
|
||||
@ -109,6 +116,13 @@ function Rect(a, top, width, height) {
|
||||
};
|
||||
|
||||
Rect.prototype = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [Rect (left,top,width,height)] for debug use
|
||||
toString: function Rect_toString() {
|
||||
return "[Rect (" + this.left + "," + this.top + "," +
|
||||
this.width + "," + this.height + ")]";
|
||||
},
|
||||
|
||||
get right() this.left + this.width,
|
||||
set right(value) {
|
||||
@ -282,6 +296,13 @@ function Range(min, max) {
|
||||
};
|
||||
|
||||
Range.prototype = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [Range (min,max)] for debug use
|
||||
toString: function Range_toString() {
|
||||
return "[Range (" + this.min + "," + this.max + ")]";
|
||||
},
|
||||
|
||||
// Variable: extent
|
||||
// Equivalent to max-min
|
||||
get extent() {
|
||||
@ -464,6 +485,13 @@ Subscribable.prototype = {
|
||||
let Utils = {
|
||||
defaultFaviconURL: "chrome://mozapps/skin/places/defaultFavicon.png",
|
||||
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [Utils] for debug use
|
||||
toString: function Utils_toString() {
|
||||
return "[Utils]";
|
||||
},
|
||||
|
||||
// ___ Logging
|
||||
useConsole: true, // as opposed to dump
|
||||
showTime: false,
|
||||
|
@ -116,6 +116,13 @@ function scorePatternMatch(pattern, matched, offset) {
|
||||
// <TabItem>s and <xul:tab>s without having to worry which
|
||||
// one is which.
|
||||
var TabUtils = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [TabUtils] for debug use
|
||||
toString: function TabUtils_toString() {
|
||||
return "[TabUtils]";
|
||||
},
|
||||
|
||||
// ---------
|
||||
// Function: _nameOfTab
|
||||
// Given a <TabItem> or a <xul:tab> returns the tab's name.
|
||||
@ -166,7 +173,14 @@ function TabMatcher(term) {
|
||||
this.term = term;
|
||||
}
|
||||
|
||||
TabMatcher.prototype = {
|
||||
TabMatcher.prototype = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [TabMatcher (term)] for debug use
|
||||
toString: function TabMatcher_toString() {
|
||||
return "[TabMatcher (" + this.term + ")]";
|
||||
},
|
||||
|
||||
// ---------
|
||||
// Function: _filterAndSortMatches
|
||||
// Given an array of <TabItem>s and <xul:tab>s returns a new array
|
||||
@ -316,6 +330,13 @@ function SearchEventHandlerClass() {
|
||||
}
|
||||
|
||||
SearchEventHandlerClass.prototype = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [SearchEventHandler] for debug use
|
||||
toString: function SearchEventHandlerClass_toString() {
|
||||
return "[SearchEventHandler]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: init
|
||||
// Initializes the searchbox to be focused, and everything
|
||||
|
@ -50,6 +50,13 @@ let Storage = {
|
||||
CACHE_CLIENT_IDENTIFIER: "tabview-cache",
|
||||
CACHE_PREFIX: "moz-panorama:",
|
||||
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [Storage] for debug use
|
||||
toString: function Storage_toString() {
|
||||
return "[Storage]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: init
|
||||
// Sets up the object.
|
||||
@ -413,6 +420,13 @@ function CacheListener(callback) {
|
||||
};
|
||||
|
||||
CacheListener.prototype = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [CacheListener] for debug use
|
||||
toString: function CacheListener_toString() {
|
||||
return "[CacheListener]";
|
||||
},
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsICacheListener]),
|
||||
onCacheEntryAvailable: function (entry, access, status) {
|
||||
this.callback(entry, access, status);
|
||||
|
@ -212,6 +212,13 @@ function TabItem(tab, options) {
|
||||
};
|
||||
|
||||
TabItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [TabItem (tab)] for debug use
|
||||
toString: function TabItem_toString() {
|
||||
return "[TabItem (" + this.tab + ")]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: forceCanvasSize
|
||||
// Repaints the thumbnail with the given resolution, and forces it
|
||||
@ -672,6 +679,8 @@ TabItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
let transform = this.getZoomTransform();
|
||||
TabItems.pausePainting();
|
||||
|
||||
if (this.parent && this.parent.expanded)
|
||||
$tabEl.removeClass("stack-trayed");
|
||||
$tabEl.addClass("front");
|
||||
$canvas
|
||||
.css({ '-moz-transform-origin': transform.transformOrigin })
|
||||
@ -812,6 +821,13 @@ let TabItems = {
|
||||
_reconnectingPaused: false,
|
||||
tabItemPadding: {},
|
||||
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [TabItems count=count] for debug use
|
||||
toString: function TabItems_toString() {
|
||||
return "[TabItems count=" + this.items.length + "]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: init
|
||||
// Set up the necessary tracking to maintain the <TabItems>s.
|
||||
@ -855,7 +871,9 @@ let TabItems = {
|
||||
if (tab.ownerDocument.defaultView != gWindow || tab.pinned)
|
||||
return;
|
||||
|
||||
self.unlink(tab);
|
||||
// XXX bug #635975 - don't unlink the tab if the dom window is closing.
|
||||
if (!UI.isDOMWindowClosing)
|
||||
self.unlink(tab);
|
||||
}
|
||||
for (let name in this._eventListeners) {
|
||||
AllTabs.register(name, this._eventListeners[name]);
|
||||
@ -1338,6 +1356,13 @@ TabPriorityQueue.prototype = {
|
||||
_low: [], // low priority queue
|
||||
_high: [], // high priority queue
|
||||
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [TabPriorityQueue count=count] for debug use
|
||||
toString: function TabPriorityQueue_toString() {
|
||||
return "[TabPriorityQueue count=" + (this._low.length + this._high.length) + "]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: clear
|
||||
// Empty the update queue
|
||||
@ -1439,6 +1464,13 @@ function TabCanvas(tab, canvas) {
|
||||
};
|
||||
|
||||
TabCanvas.prototype = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [TabCanvas (tab)] for debug use
|
||||
toString: function TabCanvas_toString() {
|
||||
return "[TabCanvas (" + this.tab + ")]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: paint
|
||||
paint: function TabCanvas_paint(evt) {
|
||||
|
@ -110,6 +110,15 @@ function Trench(element, xory, type, edge) {
|
||||
};
|
||||
|
||||
Trench.prototype = {
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [Trench edge type (parentItem)] for debug use
|
||||
toString: function Trench_toString() {
|
||||
return "[Trench " + this.edge + " " + this.type +
|
||||
(this.parentItem ? " (" + this.parentItem + ")" : "") +
|
||||
"]";
|
||||
},
|
||||
|
||||
//----------
|
||||
// Variable: radius
|
||||
// (integer) radius is how far away we should snap from
|
||||
@ -481,6 +490,13 @@ var Trenches = {
|
||||
|
||||
trenches: [],
|
||||
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [Trenches count=count] for debug use
|
||||
toString: function Trenches_toString() {
|
||||
return "[Trenches count=" + this.trenches.length + "]";
|
||||
},
|
||||
|
||||
// ---------
|
||||
// Function: getById
|
||||
// Return the specified <Trench>.
|
||||
|
@ -132,6 +132,13 @@ let UI = {
|
||||
// windows is about to close.
|
||||
isDOMWindowClosing: false,
|
||||
|
||||
// ----------
|
||||
// Function: toString
|
||||
// Prints [UI] for debug use
|
||||
toString: function UI_toString() {
|
||||
return "[UI]";
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: init
|
||||
// Must be called after the object is created.
|
||||
|
@ -123,6 +123,7 @@ _BROWSER_FILES = \
|
||||
browser_tabview_dragdrop.js \
|
||||
browser_tabview_exit_button.js \
|
||||
browser_tabview_expander.js \
|
||||
browser_tabview_firstrun_pref.js \
|
||||
browser_tabview_group.js \
|
||||
browser_tabview_launch.js \
|
||||
browser_tabview_multiwindow_search.js \
|
||||
|
@ -2,6 +2,7 @@
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
let handleDialog;
|
||||
let timer; // keep in outer scope so it's not GC'd before firing
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
@ -124,7 +125,7 @@ function startCallbackTimer() {
|
||||
const dialogDelay = 10;
|
||||
|
||||
// Use a timer to invoke a callback to twiddle the authentication dialog
|
||||
let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
||||
timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
||||
timer.init(observer, dialogDelay, Ci.nsITimer.TYPE_ONE_SHOT);
|
||||
}
|
||||
|
||||
|
@ -1,21 +1,28 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
var prefsBranch = Cc["@mozilla.org/preferences-service;1"].
|
||||
let prefsBranch = Cc["@mozilla.org/preferences-service;1"].
|
||||
getService(Ci.nsIPrefService).
|
||||
getBranch("browser.panorama.");
|
||||
let originalPrefState;
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
ok(!TabView.isVisible(), "Main window TabView is hidden");
|
||||
|
||||
ok(experienced(), "should start as experienced");
|
||||
originalPrefState = experienced();
|
||||
|
||||
prefsBranch.setBoolPref("experienced_first_run", false);
|
||||
ok(!experienced(), "set to not experienced");
|
||||
|
||||
newWindowWithTabView(checkFirstRun, part2);
|
||||
newWindowWithTabView(checkFirstRun, function() {
|
||||
// open tabview doesn't count as first use experience so setting it manually
|
||||
prefsBranch.setBoolPref("experienced_first_run", true);
|
||||
ok(experienced(), "we're now experienced");
|
||||
|
||||
newWindowWithTabView(checkNotFirstRun, endGame);
|
||||
});
|
||||
}
|
||||
|
||||
function experienced() {
|
||||
@ -27,7 +34,7 @@ function checkFirstRun(win) {
|
||||
let contentWindow = win.document.getElementById("tab-view").contentWindow;
|
||||
|
||||
// Welcome tab disabled by bug 626754. To be fixed via bug 626926.
|
||||
todo_is(win.gBrowser.tabs.length, 2, "There should be two tabs");
|
||||
is(win.gBrowser.tabs.length, 1, "There should be one tab");
|
||||
|
||||
let groupItems = contentWindow.GroupItems.groupItems;
|
||||
is(groupItems.length, 1, "There should be one group");
|
||||
@ -35,13 +42,9 @@ function checkFirstRun(win) {
|
||||
|
||||
let orphanTabCount = contentWindow.GroupItems.getOrphanedTabs().length;
|
||||
// Welcome tab disabled by bug 626754. To be fixed via bug 626926.
|
||||
todo_is(orphanTabCount, 1, "There should also be an orphaned tab");
|
||||
|
||||
ok(experienced(), "we're now experienced");
|
||||
}
|
||||
is(orphanTabCount, 0, "There should also be no orphaned tabs");
|
||||
|
||||
function part2() {
|
||||
newWindowWithTabView(checkNotFirstRun, endGame);
|
||||
ok(!experienced(), "we're not experienced");
|
||||
}
|
||||
|
||||
function checkNotFirstRun(win) {
|
||||
@ -60,6 +63,9 @@ function checkNotFirstRun(win) {
|
||||
function endGame() {
|
||||
ok(!TabView.isVisible(), "Main window TabView is still hidden");
|
||||
ok(experienced(), "should finish as experienced");
|
||||
|
||||
prefsBranch.setBoolPref("experienced_first_run", originalPrefState);
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
pref("startup.homepage_override_url","http://www.mozilla.org/projects/%APP%/%VERSION%/whatsnew/");
|
||||
pref("startup.homepage_welcome_url","http://www.mozilla.org/projects/%APP%/%VERSION%/firstrun/");
|
||||
pref("browser.panorama.welcome_url", "http://www.mozilla.com/firefox/panorama/");
|
||||
// The time interval between checks for a new version (in seconds)
|
||||
// nightly=8 hours, official=24 hours
|
||||
pref("app.update.interval", 28800);
|
||||
|
@ -1,6 +1,5 @@
|
||||
pref("startup.homepage_override_url","http://www.mozilla.org/projects/%APP%/%VERSION%/whatsnew/");
|
||||
pref("startup.homepage_welcome_url","http://www.mozilla.org/projects/%APP%/%VERSION%/firstrun/");
|
||||
pref("browser.panorama.welcome_url", "http://www.mozilla.com/firefox/panorama/");
|
||||
// The time interval between checks for a new version (in seconds)
|
||||
// nightly=8 hours, official=24 hours
|
||||
pref("app.update.interval", 28800);
|
||||
|
@ -53,8 +53,3 @@ include $(topsrcdir)/config/rules.mk
|
||||
|
||||
libs:: $(srcdir)/run-mozilla.sh
|
||||
$(INSTALL) $< $(DIST)/bin
|
||||
|
||||
ifeq ($(OS_ARCH),OpenVMS)
|
||||
libs:: vms/mozilla.com vms/install.com vms/getinfo.com
|
||||
$(INSTALL) $? $(DIST)/bin
|
||||
endif
|
||||
|
@ -1,6 +0,0 @@
|
||||
! Component global symbol file, used for all true XPCOM components (those
|
||||
! which have IS_COMPONENT defined in their Makefile.
|
||||
!
|
||||
GSMATCH=LEQUAL,1,1
|
||||
case_sensitive=YES
|
||||
SYMBOL_VECTOR=(NSGetModule=PROCEDURE)
|
@ -1,36 +0,0 @@
|
||||
$ verify = 'f$verify(0)
|
||||
$ if p1 .eqs. "DECW" then goto decw
|
||||
$!
|
||||
$! This command file in not used by the Mozilla/CSWB software.
|
||||
$! It is here because if you report a software problem you may be asked
|
||||
$! to run it and send the output back to the support specialist.
|
||||
$!
|
||||
$ set verify
|
||||
$ set noon
|
||||
$ show process /quota
|
||||
$ show display
|
||||
$ write sys$output f$environment("procedure")
|
||||
$ show log /ful sys$disk,sys$login,tmp,home
|
||||
$ show log /ful decc*
|
||||
$ dir sys$login.;
|
||||
$ run sys$common:[syshlp.examples.decw.utils]xdpyinfo.exe
|
||||
$ show system /noprocess
|
||||
$ ucx show version
|
||||
$ type sys$sysroot:[sysmgr]decw$private_server_setup.com
|
||||
$ set noverify
|
||||
$ @sys$update:decw$versions all
|
||||
$decw:
|
||||
$ c = ""
|
||||
$f_loop:
|
||||
$ pid = f$pid(c)
|
||||
$ if pid .eqs. ""
|
||||
$ then
|
||||
$ write sys$output "Unable to find DECW$SERVER process"
|
||||
$ exit
|
||||
$ endif
|
||||
$ if f$getjpi(pid,"prcnam") .nes. "DECW$SERVER_0" then goto f_loop
|
||||
$loop:
|
||||
$ quota = f$getjpi(pid,"pgflquota")
|
||||
$ inuse = f$getjpi(pid,"pagfilcnt")
|
||||
$ write sys$output f$fao("!UL remaining out of !UL at !%D",inuse,quota,0)
|
||||
$ if verify then set verify
|
@ -1,52 +0,0 @@
|
||||
$! Command file to install/deinstall Mozilla image.
|
||||
$! This command file must exist in the root Mozilla directory (where the main
|
||||
$! images and shareables reside).
|
||||
$!
|
||||
$! P1 = INSTALL command to use.
|
||||
$! Default is "ADD /OPEN /HEADER_RESIDENT /SHARE"
|
||||
$! To remove previously installed images pass REMOVE as P1.
|
||||
$!
|
||||
$ saved_dir = f$environment("default")
|
||||
$!
|
||||
$ if p1 .eqs. "" then p1 = "add /open /head /share"
|
||||
$ me = f$envir("procedure")
|
||||
$ here = f$parse(me,,,"device") + f$parse(me,,,"directory")
|
||||
$!
|
||||
$! Main image(s).
|
||||
$!
|
||||
$ call do_many "''p1'" "''here'*-bin."
|
||||
$!
|
||||
$! All the .so files in the main directory.
|
||||
$!
|
||||
$ call do_many "''p1'" "''here'*.so"
|
||||
$!
|
||||
$! All the .so files in the components directory.
|
||||
$!
|
||||
$ set default 'here'
|
||||
$ set default [.components]
|
||||
$ me = f$envir("default")
|
||||
$ here = f$parse(me,,,"device") + f$parse(me,,,"directory")
|
||||
$ call do_many "''p1'" "''here'*.so"
|
||||
$!
|
||||
$ set default 'saved_dir'
|
||||
$ exit
|
||||
$!
|
||||
$do_one:
|
||||
$ subroutine
|
||||
$ write sys$output "Doing ",p2
|
||||
$ install 'p1' 'p2'
|
||||
$ endsubroutine
|
||||
$!
|
||||
$!
|
||||
$do_many:
|
||||
$ subroutine
|
||||
$loop:
|
||||
$ f=f$search(p2)
|
||||
$ if f .nes. ""
|
||||
$ then
|
||||
$ v=f$parse(f,,,"version")
|
||||
$ f=f-v
|
||||
$ call do_one "''p1'" "''f'"
|
||||
$ goto loop
|
||||
$ endif
|
||||
$ endsubroutine
|
@ -1,26 +0,0 @@
|
||||
! Fixed section of symbol vector for LIBXPCOM (debug)
|
||||
!
|
||||
GSMATCH=LEQUAL,2,2
|
||||
case_sensitive=YES
|
||||
!
|
||||
! --------------------------------------------------------------------------
|
||||
! Ident 2,1 introduced for M0.9.4
|
||||
! --------------------------------------------------------------------------
|
||||
!
|
||||
SYMBOL_VECTOR=(CXX$assgnfrmhlpr13nsCMPt3okfmbt=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CXX$clk16nsQeryntrfcxnk434ulf1t=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CXX$clk17nsGtSrvcByCDxnk20ffnk0=PROCEDURE)
|
||||
SYMBOL_VECTOR=(SPARE) ! __dt__13nsCOMPtr_basexv not present in debug
|
||||
!
|
||||
! --------------------------------------------------------------------------
|
||||
! Ident 2,2 introduced for Mozilla 1.1 (and hence CSWB post 1.0).
|
||||
! --------------------------------------------------------------------------
|
||||
!
|
||||
SYMBOL_VECTOR=(iid__L0__GetIID__9nsIModulexv=DATA)
|
||||
SYMBOL_VECTOR=(iid__L0__GetIID__10nsIFactoryxv=DATA)
|
||||
SYMBOL_VECTOR=(CXX$iidL0GtID11nsRnnblxv3t05kum=DATA)
|
||||
SYMBOL_VECTOR=(CXX$GtGlblSrvcMngr16nsSr1vcg2p7=PROCEDURE)
|
||||
!
|
||||
! --------------------------------------------------------------------------
|
||||
! End of fixed section
|
||||
! --------------------------------------------------------------------------
|
@ -1,26 +0,0 @@
|
||||
! Fixed section of symbol vector for LIBXPCOM (non-debug)
|
||||
!
|
||||
GSMATCH=LEQUAL,2,2
|
||||
case_sensitive=YES
|
||||
!
|
||||
! --------------------------------------------------------------------------
|
||||
! Ident 2,1 introduced for M0.9.4
|
||||
! --------------------------------------------------------------------------
|
||||
!
|
||||
SYMBOL_VECTOR=(CXX$assgnfrmhlpr13nsCMPt3okfmbt=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CXX$clk16nsQeryntrfcxnk434ulf1t=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CXX$clk17nsGtSrvcByCDxnk20ffnk0=PROCEDURE)
|
||||
SYMBOL_VECTOR=(__dt__13nsCOMPtr_basexv=PROCEDURE)
|
||||
!
|
||||
! --------------------------------------------------------------------------
|
||||
! Ident 2,2 introduced for Mozilla 1.1 (and hence CSWB post 1.0).
|
||||
! --------------------------------------------------------------------------
|
||||
!
|
||||
SYMBOL_VECTOR=(iid__L0__GetIID__9nsIModulexv=DATA)
|
||||
SYMBOL_VECTOR=(iid__L0__GetIID__10nsIFactoryxv=DATA)
|
||||
SYMBOL_VECTOR=(CXX$iidL0GtID11nsRnnblxv3t05kum=DATA)
|
||||
SYMBOL_VECTOR=(CXX$GtGlblSrvcMngr16nsSr1vcg2p7=PROCEDURE)
|
||||
!
|
||||
! --------------------------------------------------------------------------
|
||||
! End of fixed section
|
||||
! --------------------------------------------------------------------------
|
@ -1,172 +0,0 @@
|
||||
$! Command file to run Mozilla.
|
||||
$! This command file must exist in the root Mozilla directory (where the main
|
||||
$! images and shareables reside).
|
||||
$!
|
||||
$ moz_self = f$envir("procedure")
|
||||
$ moz_dir = f$parse(moz_self,,,"device") + f$parse(moz_self,,,"directory")
|
||||
$!
|
||||
$ moz_user = f$edit(f$getjpi("","username"),"trim")
|
||||
$ moz_cwd = f$environment("default")
|
||||
$ moz_image = f$trnlnm("MOZILLA_IMAGE")
|
||||
$ if moz_image .eqs. ""
|
||||
$ then
|
||||
$ moz_image = f$search("''moz_dir'*-bin.;")
|
||||
$ if moz_image .nes. ""
|
||||
$ then
|
||||
$ moz_image = f$parse(moz_image,,,"name")
|
||||
$ else
|
||||
$ moz_image = "mozilla-bin"
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$ moz_gblpages_needed = (336 * 120/100)
|
||||
$ moz_gblsects_needed = (1 * 120/100)
|
||||
$ moz_gblpages_actual = f$getsyi("free_gblpages")
|
||||
$ moz_gblsects_actual = f$getsyi("free_gblsects")
|
||||
$ moz_wait = 0
|
||||
$ if moz_gblpages_actual .lt. moz_gblpages_needed
|
||||
$ then
|
||||
$ write sys$output -
|
||||
f$fao("WARNING, estimated global pages needed=!UL, available=!UL",-
|
||||
moz_gblpages_needed, moz_gblpages_actual)
|
||||
$ moz_wait = 1
|
||||
$ endif
|
||||
$ if moz_gblsects_actual .lt. moz_gblsects_needed
|
||||
$ then
|
||||
$ write sys$output -
|
||||
f$fao("WARNING, estimated global sections needed=!UL, available=!UL",-
|
||||
moz_gblsects_needed, moz_gblsects_actual)
|
||||
$ moz_wait = 1
|
||||
$ endif
|
||||
$ if moz_wait .and. (f$mode() .eqs. "INTERACTIVE")
|
||||
$ then
|
||||
$ type sys$input
|
||||
|
||||
The above system parameter(s) may not be sufficient to
|
||||
successfully run Mozilla.
|
||||
|
||||
$ read/prompt="Do you wish to continue [NO]: " sys$command moz_ans
|
||||
$ if .not. moz_ans then exit
|
||||
$ endif
|
||||
$!
|
||||
$! We need the directory as a unix-style spec.
|
||||
$!
|
||||
$ moz_unix = "/" + f$parse(moz_self,,,"device") - ":"
|
||||
$ moz_self_dir = f$parse(moz_self,,,"directory") - "[" - "]" - "<" - ">"
|
||||
$ i=0
|
||||
$uloop:
|
||||
$ e=f$element(i,".",moz_self_dir)
|
||||
$ if e .nes. "."
|
||||
$ then
|
||||
$ moz_unix = moz_unix + "/" + e
|
||||
$ i=i+1
|
||||
$ goto uloop
|
||||
$ endif
|
||||
$ moz_unix = f$edit(moz_unix,"lowercase")
|
||||
$!
|
||||
$ moz_found_one = 0
|
||||
$so_loop:
|
||||
$ moz_so_file = f$search("''moz_dir'*.so")
|
||||
$ if moz_so_file .nes. ""
|
||||
$ then
|
||||
$ name = f$parse(moz_so_file,,,"name")
|
||||
$ define /user 'name' 'moz_dir''name'.so
|
||||
$ moz_found_one = 1
|
||||
$ goto so_loop
|
||||
$ endif
|
||||
$ if .not. moz_found_one
|
||||
$ then
|
||||
$ write sys$output "Unable to locate Mozilla images. Most likely reason is"
|
||||
$ write sys$output "because the protection on the directory"
|
||||
$ write sys$output moz_dir
|
||||
$ write sys$output "does not allow you READ access."
|
||||
$ exit
|
||||
$ endif
|
||||
$!
|
||||
$ ipc_shr = f$trnlnm("ucx$ipc_shr") - ".EXE" + ".EXE"
|
||||
$ if (f$locate("MULTINET",ipc_shr) .ne. f$length(ipc_shr)) .or. -
|
||||
(f$locate("TCPWARE",ipc_shr) .ne. f$length(ipc_shr))
|
||||
$ then
|
||||
$ define /user VMS_NULL_DL_NAME 'ipc_shr'
|
||||
$ else
|
||||
$ define /user VMS_NULL_DL_NAME SYS$SHARE:TCPIP$IPC_SHR.EXE
|
||||
$ endif
|
||||
$ define /user GETADDRINFO TCPIP$GETADDRINFO
|
||||
$ define /user FREEADDRINFO TCPIP$FREEADDRINFO
|
||||
$ define /user GETNAMEINFO TCPIP$GETNAMEINFO
|
||||
$ define /user GETIPNODEBYNAME TCPIP$GETIPNODEBYNAME
|
||||
$ define /user GETIPNODEBYADDR TCPIP$GETIPNODEBYADDR
|
||||
$ define /user FREEHOSTENT TCPIP$FREEHOSTENT
|
||||
$!
|
||||
$! A networking problem which is still unresolved means that by default
|
||||
$! the IPv6 support is disabled. If you want to turn it back on define
|
||||
$! the logical MOZILLA_IPV6 (to anything), but beware that you may
|
||||
$! encounter hangs.
|
||||
$!
|
||||
$ if f$trnlnm("MOZILLA_IPV6") .eqs. ""
|
||||
$ then
|
||||
$ define /user /nolog GETIPNODEBYNAME NO_SUCH_NAME
|
||||
$ endif
|
||||
$!
|
||||
$! These logicals define how files are created/opened.
|
||||
$! The old code used: "shr=get,put", "rfm=stmlf", "deq=500", "fop=dfw,tef"
|
||||
$!
|
||||
$! Executables
|
||||
$ define /user VMS_OPEN_ARGS_1 ".EXE.SO.SFX_AXPEXE.SFX_VAXEXE", -
|
||||
"ctx=stm", "rfm=fix", "rat=none", "mrs=512"
|
||||
$!
|
||||
$! VMS savesets
|
||||
$ define /user VMS_OPEN_ARGS_2 ".BCK.SAV", -
|
||||
"ctx=stm", "rfm=fix", "rat=none", "mrs=32256"
|
||||
$!
|
||||
$! Binary files. STM doesn't work, needs to be STMLF.
|
||||
$ define /user VMS_OPEN_ARGS_3 "..DB.GIF.JAR.JPG.MAB.MFASL.MSF.WAV.XPM.XPT", -
|
||||
"ctx=stm", "rfm=stmlf", "rat=none"
|
||||
$!
|
||||
$! Text files - covered by the catchall
|
||||
$! ".BAK.COM.CSS.DAT.DTD.HTM.HTML.JS.RDF.NET.ORG.SH.SRC.TBL.TXT.XML.XUL"
|
||||
$!
|
||||
$ define /user VMS_OPEN_ARGS_4 " ",-
|
||||
"rfm=stmlf", "rat=cr"
|
||||
$!
|
||||
$ if f$trnlnm("USER") .eqs. "" then define /user user "''moz_user'"
|
||||
$ if f$trnlnm("LOGNAME") .eqs. "" then define /user logname "''moz_user'"
|
||||
$ define /user MOZILLA_FIVE_HOME "''moz_unix'"
|
||||
$ define /user VMS_USE_VMS_DEF_PROT 1
|
||||
$ define /user VMS_ACCESS_FIX_WOK 1
|
||||
$! define /user VMS_FILE_OPEN_MODE 3
|
||||
$! define /user VMS_POLL_TIMER_MIN 10
|
||||
$! define /user VMS_POLL_TIMER_DELTA 0
|
||||
$! define /user VMS_POLL_TIMER_MAX 200
|
||||
$! define /user NSPR_LOG_MODULES "all:5"
|
||||
$! define /user NSPR_LOG_FILE dkb100:[work]log.log
|
||||
$! define /user VMS_TRACE_FILENAMES 1
|
||||
$!
|
||||
$ define /user DECC$EFS_CASE_PRESERVE 0
|
||||
$!
|
||||
$! GTK key mapping mode: 0=none, 1=LK, 2=PC
|
||||
$ if f$trnlnm("GTK_KEY_MAPPING_MODE") .eqs. "" then -
|
||||
define /user GTK_KEY_MAPPING_MODE 1
|
||||
$!
|
||||
$ write sys$output "Starting ''moz_image'..."
|
||||
$ mcr 'moz_dir''moz_image'. 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
|
||||
$ set default 'moz_dir'
|
||||
$ if f$search("[.chrome]*.*;-1") .nes. ""
|
||||
$ then
|
||||
$ set default [.chrome]
|
||||
$ moz_chrome = f$environment("default")
|
||||
$ purge 'moz_chrome'
|
||||
$ moz_ver = f$parse(f$search("''moz_chrome'all-skins.rdf"),,,"version") - ";"
|
||||
$ if moz_ver .gt. 10000 then rename 'moz_chrome'*.rdf *.*;1
|
||||
$ endif
|
||||
$!
|
||||
$ moz_keep = f$trnlnm("MOZILLA_PURGE_KEEP")
|
||||
$ if moz_keep .eqs. "" then moz_keep = "5"
|
||||
$ set default sys$login
|
||||
$ if f$search("[._MOZILLA.*]*.*") .nes. ""
|
||||
$ then
|
||||
$ purge /keep='moz_keep' [._mozilla.*...]
|
||||
$ endif
|
||||
$ set default 'moz_cwd'
|
||||
$!
|
||||
$ exit
|
@ -434,23 +434,6 @@ ifeq ($(SOLARIS_SUNPRO_CXX),1)
|
||||
GARBAGE_DIRS += SunWS_cache
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH),OpenVMS)
|
||||
GARBAGE += $(wildcard *.*_defines)
|
||||
ifdef SHARED_LIBRARY
|
||||
VMS_SYMVEC_FILE = $(SHARED_LIBRARY:$(DLL_SUFFIX)=_symvec.opt)
|
||||
ifdef MOZ_DEBUG
|
||||
VMS_SYMVEC_FILE_MODULE = $(topsrcdir)/build/unix/vms/$(notdir $(SHARED_LIBRARY:$(DLL_SUFFIX)=_dbg_symvec.opt))
|
||||
else
|
||||
VMS_SYMVEC_FILE_MODULE = $(topsrcdir)/build/unix/vms/$(notdir $(SHARED_LIBRARY:$(DLL_SUFFIX)=_symvec.opt))
|
||||
endif
|
||||
VMS_SYMVEC_FILE_COMP = $(topsrcdir)/build/unix/vms/component_symvec.opt
|
||||
GARBAGE += $(VMS_SYMVEC_FILE)
|
||||
ifdef IS_COMPONENT
|
||||
DSO_LDOPTS := $(filter-out -auto_symvec,$(DSO_LDOPTS)) $(VMS_SYMVEC_FILE)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
XPIDL_GEN_DIR = _xpidlgen
|
||||
|
||||
ifdef MOZ_UPDATE_XTERM
|
||||
@ -1180,20 +1163,6 @@ $(SHARED_LIBRARY): $(OBJS) $(LOBJS) $(DEF_FILE) $(RESFILE) $(SHARED_LIBRARY_LIBS
|
||||
ifndef INCREMENTAL_LINKER
|
||||
rm -f $@
|
||||
endif
|
||||
ifeq ($(OS_ARCH),OpenVMS)
|
||||
@if test ! -f $(VMS_SYMVEC_FILE); then \
|
||||
if test -f $(VMS_SYMVEC_FILE_MODULE); then \
|
||||
echo Creating specific component options file $(VMS_SYMVEC_FILE); \
|
||||
cp $(VMS_SYMVEC_FILE_MODULE) $(VMS_SYMVEC_FILE); \
|
||||
fi; \
|
||||
fi
|
||||
ifdef IS_COMPONENT
|
||||
@if test ! -f $(VMS_SYMVEC_FILE); then \
|
||||
echo Creating generic component options file $(VMS_SYMVEC_FILE); \
|
||||
cp $(VMS_SYMVEC_FILE_COMP) $(VMS_SYMVEC_FILE); \
|
||||
fi
|
||||
endif
|
||||
endif # OpenVMS
|
||||
ifdef DTRACE_LIB_DEPENDENT
|
||||
ifndef XP_MACOSX
|
||||
dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
|
||||
|
40
configure.in
40
configure.in
@ -1343,9 +1343,6 @@ UNIX_SYSTEM_V)
|
||||
;;
|
||||
OSF1)
|
||||
;;
|
||||
*OpenVMS*)
|
||||
HOST_OS_ARCH=OpenVMS
|
||||
;;
|
||||
OS_2)
|
||||
HOST_OS_ARCH=OS2
|
||||
;;
|
||||
@ -1434,11 +1431,6 @@ OSF1)
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*OpenVMS*)
|
||||
OS_ARCH=OpenVMS
|
||||
OS_RELEASE=`uname -v`
|
||||
OS_TEST=`uname -p`
|
||||
;;
|
||||
OS_2)
|
||||
OS_ARCH=OS2
|
||||
OS_TARGET=OS2
|
||||
@ -2614,25 +2606,6 @@ ia64*-hpux*)
|
||||
fi
|
||||
;;
|
||||
|
||||
*-openvms*)
|
||||
AC_DEFINE(NO_PW_GECOS)
|
||||
AC_DEFINE(NO_UDSOCK)
|
||||
AC_DEFINE(POLL_WITH_XCONNECTIONNUMBER)
|
||||
USE_PTHREADS=1
|
||||
MKSHLIB_FORCE_ALL='-all'
|
||||
MKSHLIB_UNFORCE_ALL='-none'
|
||||
AS='as'
|
||||
AS_DASH_C_FLAG='-Wc/names=as_is'
|
||||
AR_FLAGS='c $@'
|
||||
DSO_LDOPTS='-shared -auto_symvec'
|
||||
DSO_PIC_CFLAGS=
|
||||
MOZ_DEBUG_LDFLAGS='-g'
|
||||
COMPAQ_CXX=1
|
||||
CC_VERSION=`$CC -V 2>&1 | awk '/ C / { print $3 }'`
|
||||
CXX_VERSION=`$CXX -V 2>&1 | awk '/ C\+\+ / { print $3 }'`
|
||||
;;
|
||||
|
||||
|
||||
*-os2*)
|
||||
MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
|
||||
MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
|
||||
@ -2895,9 +2868,6 @@ case "$target" in
|
||||
*-aix4.3*|*-aix5*)
|
||||
NO_LD_ARCHIVE_FLAGS=
|
||||
;;
|
||||
*-openvms*)
|
||||
NO_LD_ARCHIVE_FLAGS=
|
||||
;;
|
||||
*-mingw*|*-wince|*-winmo)
|
||||
if test -z "$GNU_CC"; then
|
||||
NO_LD_ARCHIVE_FLAGS=
|
||||
@ -8245,11 +8215,7 @@ MOZ_ARG_DISABLE_BOOL(md,
|
||||
fi])
|
||||
if test "$_cpp_md_flag"; then
|
||||
COMPILER_DEPEND=1
|
||||
if test "$OS_ARCH" = "OpenVMS"; then
|
||||
_DEPEND_CFLAGS='$(subst =, ,$(filter-out %/.pp,-MM=-MD=-MF=$(MDDEPDIR)/$(basename $(@F)).pp))'
|
||||
else
|
||||
_DEPEND_CFLAGS='$(filter-out %/.pp,-MD -MF $(MDDEPDIR)/$(basename $(@F)).pp)'
|
||||
fi
|
||||
_DEPEND_CFLAGS='$(filter-out %/.pp,-MD -MF $(MDDEPDIR)/$(basename $(@F)).pp)'
|
||||
dnl Sun Studio on Solaris use -xM instead of -MD, see config/rules.mk
|
||||
if test "$SOLARIS_SUNPRO_CC"; then
|
||||
_DEPEND_CFLAGS=
|
||||
@ -9297,8 +9263,6 @@ dnl ========================================================
|
||||
if test "$OS_ARCH" = "Darwin"; then
|
||||
AC_DEFINE(XP_UNIX)
|
||||
AC_DEFINE(UNIX_ASYNC_DNS)
|
||||
elif test "$OS_ARCH" = "OpenVMS"; then
|
||||
AC_DEFINE(XP_UNIX)
|
||||
elif test "$OS_ARCH" != "WINNT" -a "$OS_ARCH" != "OS2" -a "$OS_ARCH" != "WINCE"; then
|
||||
AC_DEFINE(XP_UNIX)
|
||||
AC_DEFINE(UNIX_ASYNC_DNS)
|
||||
@ -9435,8 +9399,6 @@ dnl If it fails, nothing is set and config.status will run as usual.
|
||||
dnl
|
||||
dnl This does not change the $MAKEFILES variable.
|
||||
dnl
|
||||
dnl OpenVMS gets a line overflow on the long eval command, so use a temp file.
|
||||
dnl
|
||||
echo $MAKEFILES | ${PERL} $srcdir/build/autoconf/acoutput-fast.pl > conftest.sh
|
||||
. ./conftest.sh
|
||||
rm conftest.sh
|
||||
|
@ -689,7 +689,7 @@ public:
|
||||
/**
|
||||
* Return the window containing the document (the outer window).
|
||||
*/
|
||||
nsPIDOMWindow *GetWindow()
|
||||
nsPIDOMWindow *GetWindow() const
|
||||
{
|
||||
return mWindow ? mWindow->GetOuterWindow() : GetWindowInternal();
|
||||
}
|
||||
@ -707,7 +707,7 @@ public:
|
||||
/**
|
||||
* Return the outer window ID.
|
||||
*/
|
||||
PRUint64 OuterWindowID()
|
||||
PRUint64 OuterWindowID() const
|
||||
{
|
||||
nsPIDOMWindow *window = GetWindow();
|
||||
return window ? window->WindowID() : 0;
|
||||
@ -1531,7 +1531,7 @@ protected:
|
||||
nsPropertyTable* GetExtraPropertyTable(PRUint16 aCategory);
|
||||
|
||||
// Never ever call this. Only call GetWindow!
|
||||
virtual nsPIDOMWindow *GetWindowInternal() = 0;
|
||||
virtual nsPIDOMWindow *GetWindowInternal() const = 0;
|
||||
|
||||
// Never ever call this. Only call GetInnerWindow!
|
||||
virtual nsPIDOMWindow *GetInnerWindowInternal() = 0;
|
||||
|
@ -3238,6 +3238,18 @@ nsDocument::doCreateShell(nsPresContext* aContext,
|
||||
|
||||
mExternalResourceMap.ShowViewers();
|
||||
|
||||
if (mScriptGlobalObject) {
|
||||
RescheduleAnimationFrameNotifications();
|
||||
}
|
||||
|
||||
shell.swap(*aInstancePtrResult);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
nsDocument::RescheduleAnimationFrameNotifications()
|
||||
{
|
||||
nsRefreshDriver* rd = mPresShell->GetPresContext()->RefreshDriver();
|
||||
if (mHavePendingPaint) {
|
||||
rd->ScheduleBeforePaintEvent(this);
|
||||
@ -3245,10 +3257,6 @@ nsDocument::doCreateShell(nsPresContext* aContext,
|
||||
if (!mAnimationFrameListeners.IsEmpty()) {
|
||||
rd->ScheduleAnimationFrameListeners(this);
|
||||
}
|
||||
|
||||
shell.swap(*aInstancePtrResult);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
@ -3262,6 +3270,15 @@ void
|
||||
nsDocument::DeleteShell()
|
||||
{
|
||||
mExternalResourceMap.HideViewers();
|
||||
if (mScriptGlobalObject) {
|
||||
RevokeAnimationFrameNotifications();
|
||||
}
|
||||
mPresShell = nsnull;
|
||||
}
|
||||
|
||||
void
|
||||
nsDocument::RevokeAnimationFrameNotifications()
|
||||
{
|
||||
if (mHavePendingPaint) {
|
||||
mPresShell->GetPresContext()->RefreshDriver()->RevokeBeforePaintEvent(this);
|
||||
}
|
||||
@ -3269,7 +3286,6 @@ nsDocument::DeleteShell()
|
||||
mPresShell->GetPresContext()->RefreshDriver()->
|
||||
RevokeAnimationFrameListeners(this);
|
||||
}
|
||||
mPresShell = nsnull;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -3791,6 +3807,10 @@ nsDocument::SetScriptGlobalObject(nsIScriptGlobalObject *aScriptGlobalObject)
|
||||
// our layout history state now.
|
||||
mLayoutHistoryState = GetLayoutHistoryState();
|
||||
|
||||
if (mPresShell) {
|
||||
RevokeAnimationFrameNotifications();
|
||||
}
|
||||
|
||||
// Also make sure to remove our onload blocker now if we haven't done it yet
|
||||
if (mOnloadBlockCount != 0) {
|
||||
nsCOMPtr<nsILoadGroup> loadGroup = GetDocumentLoadGroup();
|
||||
@ -3847,6 +3867,10 @@ nsDocument::SetScriptGlobalObject(nsIScriptGlobalObject *aScriptGlobalObject)
|
||||
mAllowDNSPrefetch = allowDNSPrefetch;
|
||||
}
|
||||
}
|
||||
|
||||
if (mPresShell) {
|
||||
RescheduleAnimationFrameNotifications();
|
||||
}
|
||||
}
|
||||
|
||||
// Remember the pointer to our window (or lack there of), to avoid
|
||||
@ -3889,7 +3913,7 @@ nsDocument::SetScriptHandlingObject(nsIScriptGlobalObject* aScriptObject)
|
||||
}
|
||||
|
||||
nsPIDOMWindow *
|
||||
nsDocument::GetWindowInternal()
|
||||
nsDocument::GetWindowInternal() const
|
||||
{
|
||||
NS_ASSERTION(!mWindow, "This should not be called when mWindow is not null!");
|
||||
|
||||
|
@ -1058,7 +1058,7 @@ protected:
|
||||
const nsAString& aType,
|
||||
PRBool aPersisted);
|
||||
|
||||
virtual nsPIDOMWindow *GetWindowInternal();
|
||||
virtual nsPIDOMWindow *GetWindowInternal() const;
|
||||
virtual nsPIDOMWindow *GetInnerWindowInternal();
|
||||
virtual nsIScriptGlobalObject* GetScriptHandlingObjectInternal() const;
|
||||
virtual PRBool InternalAllowXULXBL();
|
||||
@ -1207,6 +1207,11 @@ private:
|
||||
void EnableStyleSheetsForSetInternal(const nsAString& aSheetSet,
|
||||
PRBool aUpdateCSSLoader);
|
||||
|
||||
// Revoke any pending notifications due to mozRequestAnimationFrame calls
|
||||
void RevokeAnimationFrameNotifications();
|
||||
// Reschedule any notifications we need to handle mozRequestAnimationFrame
|
||||
void RescheduleAnimationFrameNotifications();
|
||||
|
||||
// These are not implemented and not supported.
|
||||
nsDocument(const nsDocument& aOther);
|
||||
nsDocument& operator=(const nsDocument& aOther);
|
||||
|
@ -1611,6 +1611,7 @@ GK_ATOM(columnSetFrame, "ColumnSetFrame")
|
||||
GK_ATOM(comboboxControlFrame, "ComboboxControlFrame")
|
||||
GK_ATOM(comboboxDisplayFrame, "ComboboxDisplayFrame")
|
||||
GK_ATOM(deckFrame, "DeckFrame")
|
||||
GK_ATOM(directionalFrame, "DirectionalFrame")
|
||||
GK_ATOM(fieldSetFrame, "FieldSetFrame")
|
||||
GK_ATOM(frameSetFrame, "FrameSetFrame")
|
||||
GK_ATOM(gfxButtonControlFrame, "gfxButtonControlFrame")
|
||||
|
@ -120,6 +120,10 @@ nsInProcessTabChildGlobal::nsInProcessTabChildGlobal(nsIDocShell* aShell,
|
||||
nsInProcessTabChildGlobal::~nsInProcessTabChildGlobal()
|
||||
{
|
||||
NS_ASSERTION(!mCx, "Couldn't release JSContext?!?");
|
||||
|
||||
if (mListenerManager) {
|
||||
mListenerManager->Disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -126,19 +126,16 @@
|
||||
#define XML_HTTP_REQUEST_ABORTED (1 << 7) // Internal
|
||||
#define XML_HTTP_REQUEST_ASYNC (1 << 8) // Internal
|
||||
#define XML_HTTP_REQUEST_PARSEBODY (1 << 9) // Internal
|
||||
#define XML_HTTP_REQUEST_XSITEENABLED (1 << 10) // Internal, Is any cross-site request allowed?
|
||||
// Even if this is false the
|
||||
// access-control spec is supported
|
||||
#define XML_HTTP_REQUEST_SYNCLOOPING (1 << 11) // Internal
|
||||
#define XML_HTTP_REQUEST_MULTIPART (1 << 12) // Internal
|
||||
#define XML_HTTP_REQUEST_GOT_FINAL_STOP (1 << 13) // Internal
|
||||
#define XML_HTTP_REQUEST_BACKGROUND (1 << 14) // Internal
|
||||
#define XML_HTTP_REQUEST_SYNCLOOPING (1 << 10) // Internal
|
||||
#define XML_HTTP_REQUEST_MULTIPART (1 << 11) // Internal
|
||||
#define XML_HTTP_REQUEST_GOT_FINAL_STOP (1 << 12) // Internal
|
||||
#define XML_HTTP_REQUEST_BACKGROUND (1 << 13) // Internal
|
||||
// This is set when we've got the headers for a multipart XMLHttpRequest,
|
||||
// but haven't yet started to process the first part.
|
||||
#define XML_HTTP_REQUEST_MPART_HEADERS (1 << 15) // Internal
|
||||
#define XML_HTTP_REQUEST_USE_XSITE_AC (1 << 16) // Internal
|
||||
#define XML_HTTP_REQUEST_NEED_AC_PREFLIGHT (1 << 17) // Internal
|
||||
#define XML_HTTP_REQUEST_AC_WITH_CREDENTIALS (1 << 18) // Internal
|
||||
#define XML_HTTP_REQUEST_MPART_HEADERS (1 << 14) // Internal
|
||||
#define XML_HTTP_REQUEST_USE_XSITE_AC (1 << 15) // Internal
|
||||
#define XML_HTTP_REQUEST_NEED_AC_PREFLIGHT (1 << 16) // Internal
|
||||
#define XML_HTTP_REQUEST_AC_WITH_CREDENTIALS (1 << 17) // Internal
|
||||
|
||||
#define XML_HTTP_REQUEST_LOADSTATES \
|
||||
(XML_HTTP_REQUEST_UNINITIALIZED | \
|
||||
@ -1639,14 +1636,12 @@ nsXMLHttpRequest::GetCurrentHttpChannel()
|
||||
nsresult
|
||||
nsXMLHttpRequest::CheckChannelForCrossSiteRequest(nsIChannel* aChannel)
|
||||
{
|
||||
// First check if cross-site requests are enabled
|
||||
if ((mState & XML_HTTP_REQUEST_XSITEENABLED)) {
|
||||
// First check if cross-site requests are enabled...
|
||||
if (IsSystemXHR()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// or if this is a same-origin request.
|
||||
NS_ASSERTION(!nsContentUtils::IsSystemPrincipal(mPrincipal),
|
||||
"Shouldn't get here!");
|
||||
// ...or if this is a same-origin request.
|
||||
if (nsContentUtils::CheckMayLoad(mPrincipal, aChannel)) {
|
||||
return NS_OK;
|
||||
}
|
||||
@ -1797,12 +1792,6 @@ nsXMLHttpRequest::OpenRequest(const nsACString& method,
|
||||
channelPolicy);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
// Check if we're doing a cross-origin request.
|
||||
if (nsContentUtils::IsSystemPrincipal(mPrincipal)) {
|
||||
// Chrome callers are always allowed to read from different origins.
|
||||
mState |= XML_HTTP_REQUEST_XSITEENABLED;
|
||||
}
|
||||
|
||||
mState &= ~(XML_HTTP_REQUEST_USE_XSITE_AC |
|
||||
XML_HTTP_REQUEST_NEED_AC_PREFLIGHT);
|
||||
|
||||
@ -1823,17 +1812,6 @@ nsXMLHttpRequest::Open(const nsACString& method, const nsACString& url,
|
||||
PRBool async, const nsAString& user,
|
||||
const nsAString& password, PRUint8 optional_argc)
|
||||
{
|
||||
if (nsContentUtils::GetCurrentJSContext()) {
|
||||
// We're (likely) called from JS
|
||||
|
||||
// Find out if UniversalBrowserRead privileges are enabled
|
||||
if (nsContentUtils::IsCallerTrustedForRead()) {
|
||||
mState |= XML_HTTP_REQUEST_XSITEENABLED;
|
||||
} else {
|
||||
mState &= ~XML_HTTP_REQUEST_XSITEENABLED;
|
||||
}
|
||||
}
|
||||
|
||||
if (!optional_argc) {
|
||||
// No optional arguments were passed in. Default async to true.
|
||||
async = PR_TRUE;
|
||||
@ -1954,8 +1932,8 @@ nsXMLHttpRequest::OnStartRequest(nsIRequest *request, nsISupports *ctxt)
|
||||
nsCOMPtr<nsIChannel> channel(do_QueryInterface(request));
|
||||
NS_ENSURE_TRUE(channel, NS_ERROR_UNEXPECTED);
|
||||
|
||||
nsCOMPtr<nsIPrincipal> documentPrincipal = mPrincipal;
|
||||
if (nsContentUtils::IsSystemPrincipal(documentPrincipal)) {
|
||||
nsCOMPtr<nsIPrincipal> documentPrincipal;
|
||||
if (IsSystemXHR()) {
|
||||
// Don't give this document the system principal. We need to keep track of
|
||||
// mPrincipal being system because we use it for various security checks
|
||||
// that should be passing, but the document data shouldn't get a system
|
||||
@ -1963,6 +1941,8 @@ nsXMLHttpRequest::OnStartRequest(nsIRequest *request, nsISupports *ctxt)
|
||||
nsresult rv;
|
||||
documentPrincipal = do_CreateInstance("@mozilla.org/nullprincipal;1", &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
} else {
|
||||
documentPrincipal = mPrincipal;
|
||||
}
|
||||
|
||||
channel->SetOwner(documentPrincipal);
|
||||
@ -2040,7 +2020,7 @@ nsXMLHttpRequest::OnStartRequest(nsIRequest *request, nsISupports *ctxt)
|
||||
nsCOMPtr<nsIDocument> responseDoc = do_QueryInterface(mResponseXML);
|
||||
responseDoc->SetPrincipal(documentPrincipal);
|
||||
|
||||
if (nsContentUtils::IsSystemPrincipal(mPrincipal)) {
|
||||
if (IsSystemXHR()) {
|
||||
responseDoc->ForceEnableXULXBL();
|
||||
}
|
||||
|
||||
@ -2420,7 +2400,7 @@ nsXMLHttpRequest::Send(nsIVariant *aBody)
|
||||
if (httpChannel) {
|
||||
httpChannel->GetRequestMethod(method); // If GET, method name will be uppercase
|
||||
|
||||
if (!nsContentUtils::IsSystemPrincipal(mPrincipal)) {
|
||||
if (!IsSystemXHR()) {
|
||||
// Get the referrer for the request.
|
||||
//
|
||||
// If it weren't for history.push/replaceState, we could just use the
|
||||
@ -2656,7 +2636,7 @@ nsXMLHttpRequest::Send(nsIVariant *aBody)
|
||||
}
|
||||
}
|
||||
|
||||
if (!(mState & XML_HTTP_REQUEST_XSITEENABLED)) {
|
||||
if (!IsSystemXHR()) {
|
||||
// Always create a nsCrossSiteListenerProxy here even if it's
|
||||
// a same-origin request right now, since it could be redirected.
|
||||
listener = new nsCrossSiteListenerProxy(listener, mPrincipal, mChannel,
|
||||
@ -2853,7 +2833,7 @@ nsXMLHttpRequest::SetRequestHeader(const nsACString& header,
|
||||
}
|
||||
|
||||
// Check for dangerous cross-site headers
|
||||
PRBool safeHeader = !!(mState & XML_HTTP_REQUEST_XSITEENABLED);
|
||||
bool safeHeader = IsSystemXHR();
|
||||
if (!safeHeader) {
|
||||
// Content-Type isn't always safe, but we'll deal with it in Send()
|
||||
const char *kCrossOriginSafeHeaders[] = {
|
||||
@ -2862,7 +2842,7 @@ nsXMLHttpRequest::SetRequestHeader(const nsACString& header,
|
||||
};
|
||||
for (i = 0; i < NS_ARRAY_LENGTH(kCrossOriginSafeHeaders); ++i) {
|
||||
if (header.LowerCaseEqualsASCII(kCrossOriginSafeHeaders[i])) {
|
||||
safeHeader = PR_TRUE;
|
||||
safeHeader = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -69,6 +69,7 @@
|
||||
#include "nsIPrivateDOMEvent.h"
|
||||
#include "nsDOMProgressEvent.h"
|
||||
#include "nsDOMEventTargetWrapperCache.h"
|
||||
#include "nsContentUtils.h"
|
||||
|
||||
class nsILoadGroup;
|
||||
class AsyncVerifyRedirectCallbackForwarder;
|
||||
@ -333,6 +334,10 @@ protected:
|
||||
|
||||
already_AddRefed<nsIHttpChannel> GetCurrentHttpChannel();
|
||||
|
||||
bool IsSystemXHR() {
|
||||
return !!nsContentUtils::IsSystemPrincipal(mPrincipal);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if aChannel is ok for a cross-site request by making sure no
|
||||
* inappropriate headers are set, and no username/password is set.
|
||||
|
@ -22,9 +22,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=426308
|
||||
|
||||
const SJS_URL = "http://example.org:80/tests/content/base/test/bug426308-redirect.sjs";
|
||||
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
|
||||
|
||||
var req = new XMLHttpRequest();
|
||||
var req = SpecialPowers.createSystemXHR();
|
||||
req.open("GET", SJS_URL + "?" + window.location.href, false);
|
||||
req.send(null);
|
||||
|
||||
|
@ -52,8 +52,7 @@ function createDoc() {
|
||||
function xhrDoc(idx) {
|
||||
return function() {
|
||||
// Defy same-origin restrictions!
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
var xhr = new XMLHttpRequest();
|
||||
var xhr = SpecialPowers.createSystemXHR();
|
||||
xhr.open("GET", docSources[idx], false);
|
||||
xhr.send();
|
||||
return xhr.responseXML;
|
||||
|
@ -43,14 +43,15 @@
|
||||
#include "nsIDocShell.h"
|
||||
#include "gfxPattern.h"
|
||||
|
||||
// {EC90F32E-7848-4819-A1E3-02E64C682A72}
|
||||
#define NS_ICANVASRENDERINGCONTEXTINTERNAL_IID \
|
||||
{ 0xec90f32e, 0x7848, 0x4819, { 0xa1, 0xe3, 0x2, 0xe6, 0x4c, 0x68, 0x2a, 0x72 } }
|
||||
{ 0xffb42d3c, 0x8281, 0x44c8, \
|
||||
{ 0xac, 0xba, 0x73, 0x15, 0x31, 0xaa, 0xe5, 0x07 } }
|
||||
|
||||
class nsHTMLCanvasElement;
|
||||
class gfxContext;
|
||||
class gfxASurface;
|
||||
class nsIPropertyBag;
|
||||
class nsDisplayListBuilder;
|
||||
|
||||
namespace mozilla {
|
||||
namespace layers {
|
||||
@ -108,7 +109,8 @@ public:
|
||||
|
||||
// Return the CanvasLayer for this context, creating
|
||||
// one for the given layer manager if not available.
|
||||
virtual already_AddRefed<CanvasLayer> GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
virtual already_AddRefed<CanvasLayer> GetCanvasLayer(nsDisplayListBuilder* aBuilder,
|
||||
CanvasLayer *aOldLayer,
|
||||
LayerManager *aManager) = 0;
|
||||
|
||||
virtual void MarkContextClean() = 0;
|
||||
|
@ -58,6 +58,7 @@
|
||||
#include "gfxUtils.h"
|
||||
|
||||
#include "CanvasUtils.h"
|
||||
#include "nsDisplayList.h"
|
||||
|
||||
#include "GLContextProvider.h"
|
||||
|
||||
@ -247,6 +248,9 @@ WebGLContext::DestroyResourcesAndContext()
|
||||
void
|
||||
WebGLContext::Invalidate()
|
||||
{
|
||||
if (mInvalidated)
|
||||
return;
|
||||
|
||||
if (!mCanvasElement)
|
||||
return;
|
||||
|
||||
@ -254,9 +258,6 @@ WebGLContext::Invalidate()
|
||||
nsSVGEffects::InvalidateDirectRenderingObservers(HTMLCanvasElement());
|
||||
#endif
|
||||
|
||||
if (mInvalidated)
|
||||
return;
|
||||
|
||||
mInvalidated = PR_TRUE;
|
||||
HTMLCanvasElement()->InvalidateFrame();
|
||||
}
|
||||
@ -619,18 +620,27 @@ WebGLContext::GetThebesSurface(gfxASurface **surface)
|
||||
|
||||
static PRUint8 gWebGLLayerUserData;
|
||||
|
||||
class WebGLContextUserData : public LayerUserData {
|
||||
public:
|
||||
WebGLContextUserData(nsHTMLCanvasElement *aContent)
|
||||
: mContent(aContent) {}
|
||||
static void DidTransactionCallback(void* aData)
|
||||
{
|
||||
static_cast<WebGLContextUserData*>(aData)->mContent->MarkContextClean();
|
||||
}
|
||||
|
||||
private:
|
||||
nsRefPtr<nsHTMLCanvasElement> mContent;
|
||||
};
|
||||
|
||||
already_AddRefed<layers::CanvasLayer>
|
||||
WebGLContext::GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
WebGLContext::GetCanvasLayer(nsDisplayListBuilder* aBuilder,
|
||||
CanvasLayer *aOldLayer,
|
||||
LayerManager *aManager)
|
||||
{
|
||||
if (!mResetLayer && aOldLayer &&
|
||||
aOldLayer->HasUserData(&gWebGLLayerUserData)) {
|
||||
NS_ADDREF(aOldLayer);
|
||||
if (mInvalidated) {
|
||||
aOldLayer->Updated(nsIntRect(0, 0, mWidth, mHeight));
|
||||
mInvalidated = PR_FALSE;
|
||||
HTMLCanvasElement()->GetPrimaryCanvasFrame()->MarkLayersActive();
|
||||
}
|
||||
return aOldLayer;
|
||||
}
|
||||
|
||||
@ -639,7 +649,25 @@ WebGLContext::GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
NS_WARNING("CreateCanvasLayer returned null!");
|
||||
return nsnull;
|
||||
}
|
||||
canvasLayer->SetUserData(&gWebGLLayerUserData, nsnull);
|
||||
WebGLContextUserData *userData = nsnull;
|
||||
if (aBuilder->IsPaintingToWindow()) {
|
||||
// Make the layer tell us whenever a transaction finishes (including
|
||||
// the current transaction), so we can clear our invalidation state and
|
||||
// start invalidating again. We need to do this for the layer that is
|
||||
// being painted to a window (there shouldn't be more than one at a time,
|
||||
// and if there is, flushing the invalidation state more often than
|
||||
// necessary is harmless).
|
||||
|
||||
// The layer will be destroyed when we tear down the presentation
|
||||
// (at the latest), at which time this userData will be destroyed,
|
||||
// releasing the reference to the element.
|
||||
// The userData will receive DidTransactionCallbacks, which flush the
|
||||
// the invalidation state to indicate that the canvas is up to date.
|
||||
userData = new WebGLContextUserData(HTMLCanvasElement());
|
||||
canvasLayer->SetDidTransactionCallback(
|
||||
WebGLContextUserData::DidTransactionCallback, userData);
|
||||
}
|
||||
canvasLayer->SetUserData(&gWebGLLayerUserData, userData);
|
||||
|
||||
CanvasLayer::Data data;
|
||||
|
||||
@ -661,9 +689,8 @@ WebGLContext::GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
canvasLayer->Initialize(data);
|
||||
PRUint32 flags = gl->CreationFormat().alpha == 0 ? Layer::CONTENT_OPAQUE : 0;
|
||||
canvasLayer->SetContentFlags(flags);
|
||||
canvasLayer->Updated(nsIntRect(0, 0, mWidth, mHeight));
|
||||
canvasLayer->Updated();
|
||||
|
||||
mInvalidated = PR_FALSE;
|
||||
mResetLayer = PR_FALSE;
|
||||
|
||||
return canvasLayer.forget().get();
|
||||
|
@ -368,9 +368,10 @@ public:
|
||||
: mBoundCubeMapTextures[mActiveTexture];
|
||||
}
|
||||
|
||||
already_AddRefed<CanvasLayer> GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
already_AddRefed<CanvasLayer> GetCanvasLayer(nsDisplayListBuilder* aBuilder,
|
||||
CanvasLayer *aOldLayer,
|
||||
LayerManager *aManager);
|
||||
void MarkContextClean() { }
|
||||
void MarkContextClean() { mInvalidated = PR_FALSE; }
|
||||
|
||||
// a number that increments every time we have an event that causes
|
||||
// all context resources to be lost.
|
||||
|
@ -96,6 +96,7 @@
|
||||
#include "nsIDocShellTreeNode.h"
|
||||
#include "nsIXPConnect.h"
|
||||
#include "jsapi.h"
|
||||
#include "nsDisplayList.h"
|
||||
|
||||
#include "nsTArray.h"
|
||||
|
||||
@ -407,7 +408,8 @@ public:
|
||||
NS_IMETHOD GetThebesSurface(gfxASurface **surface);
|
||||
NS_IMETHOD SetIsOpaque(PRBool isOpaque);
|
||||
NS_IMETHOD Reset();
|
||||
already_AddRefed<CanvasLayer> GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
already_AddRefed<CanvasLayer> GetCanvasLayer(nsDisplayListBuilder* aBuilder,
|
||||
CanvasLayer *aOldLayer,
|
||||
LayerManager *aManager);
|
||||
void MarkContextClean();
|
||||
NS_IMETHOD SetIsIPC(PRBool isIPC);
|
||||
@ -455,7 +457,6 @@ public:
|
||||
friend class PathAutoSaveRestore;
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* The number of living nsCanvasRenderingContexts. When this goes down to
|
||||
* 0, we free the premultiply and unpremultiply tables, if they exist.
|
||||
@ -4099,8 +4100,22 @@ nsCanvasRenderingContext2D::SetMozImageSmoothingEnabled(PRBool val)
|
||||
|
||||
static PRUint8 g2DContextLayerUserData;
|
||||
|
||||
class CanvasRenderingContext2DUserData : public LayerUserData {
|
||||
public:
|
||||
CanvasRenderingContext2DUserData(nsHTMLCanvasElement *aContent)
|
||||
: mContent(aContent) {}
|
||||
static void DidTransactionCallback(void* aData)
|
||||
{
|
||||
static_cast<CanvasRenderingContext2DUserData*>(aData)->mContent->MarkContextClean();
|
||||
}
|
||||
|
||||
private:
|
||||
nsRefPtr<nsHTMLCanvasElement> mContent;
|
||||
};
|
||||
|
||||
already_AddRefed<CanvasLayer>
|
||||
nsCanvasRenderingContext2D::GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
nsCanvasRenderingContext2D::GetCanvasLayer(nsDisplayListBuilder* aBuilder,
|
||||
CanvasLayer *aOldLayer,
|
||||
LayerManager *aManager)
|
||||
{
|
||||
if (!mValid)
|
||||
@ -4109,14 +4124,6 @@ nsCanvasRenderingContext2D::GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
if (!mResetLayer && aOldLayer &&
|
||||
aOldLayer->HasUserData(&g2DContextLayerUserData)) {
|
||||
NS_ADDREF(aOldLayer);
|
||||
if (mIsEntireFrameInvalid || mInvalidateCount > 0) {
|
||||
// XXX Need to just update the changed area here; we should keep track
|
||||
// of the rectangle based on Redraw args.
|
||||
aOldLayer->Updated(nsIntRect(0, 0, mWidth, mHeight));
|
||||
MarkContextClean();
|
||||
HTMLCanvasElement()->GetPrimaryCanvasFrame()->MarkLayersActive();
|
||||
}
|
||||
|
||||
return aOldLayer;
|
||||
}
|
||||
|
||||
@ -4125,7 +4132,25 @@ nsCanvasRenderingContext2D::GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
NS_WARNING("CreateCanvasLayer returned null!");
|
||||
return nsnull;
|
||||
}
|
||||
canvasLayer->SetUserData(&g2DContextLayerUserData, nsnull);
|
||||
CanvasRenderingContext2DUserData *userData = nsnull;
|
||||
if (aBuilder->IsPaintingToWindow()) {
|
||||
// Make the layer tell us whenever a transaction finishes (including
|
||||
// the current transaction), so we can clear our invalidation state and
|
||||
// start invalidating again. We need to do this for the layer that is
|
||||
// being painted to a window (there shouldn't be more than one at a time,
|
||||
// and if there is, flushing the invalidation state more often than
|
||||
// necessary is harmless).
|
||||
|
||||
// The layer will be destroyed when we tear down the presentation
|
||||
// (at the latest), at which time this userData will be destroyed,
|
||||
// releasing the reference to the element.
|
||||
// The userData will receive DidTransactionCallbacks, which flush the
|
||||
// the invalidation state to indicate that the canvas is up to date.
|
||||
userData = new CanvasRenderingContext2DUserData(HTMLCanvasElement());
|
||||
canvasLayer->SetDidTransactionCallback(
|
||||
CanvasRenderingContext2DUserData::DidTransactionCallback, userData);
|
||||
}
|
||||
canvasLayer->SetUserData(&g2DContextLayerUserData, userData);
|
||||
|
||||
CanvasLayer::Data data;
|
||||
|
||||
@ -4135,13 +4160,11 @@ nsCanvasRenderingContext2D::GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
canvasLayer->Initialize(data);
|
||||
PRUint32 flags = mOpaque ? Layer::CONTENT_OPAQUE : 0;
|
||||
canvasLayer->SetContentFlags(flags);
|
||||
canvasLayer->Updated(nsIntRect(0, 0, mWidth, mHeight));
|
||||
canvasLayer->Updated();
|
||||
|
||||
mResetLayer = PR_FALSE;
|
||||
|
||||
MarkContextClean();
|
||||
|
||||
return canvasLayer.forget().get();
|
||||
return canvasLayer.forget();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -291,6 +291,15 @@ nsEventListenerManager::nsEventListenerManager() :
|
||||
|
||||
nsEventListenerManager::~nsEventListenerManager()
|
||||
{
|
||||
// If your code fails this assertion, a possible reason is that
|
||||
// a class did not call our Disconnect() manually. Note that
|
||||
// this class can have Disconnect called in one of two ways:
|
||||
// if it is part of a cycle, then in Unlink() (such a cycle
|
||||
// would be with one of the listeners, not mTarget which is weak).
|
||||
// If not part of a cycle, then Disconnect must be called manually,
|
||||
// typically from the destructor of the owner class (mTarget).
|
||||
// XXX azakai: Is there any reason to not just call Disconnect
|
||||
// from right here, if not previously called?
|
||||
NS_ASSERTION(!mTarget, "didn't call Disconnect");
|
||||
RemoveAllListeners();
|
||||
|
||||
|
@ -1131,10 +1131,12 @@ nsEventStateManager::PreHandleEvent(nsPresContext* aPresContext,
|
||||
StopTrackingDragGesture();
|
||||
#endif
|
||||
sNormalLMouseEventInProcess = PR_FALSE;
|
||||
// then fall through...
|
||||
case nsMouseEvent::eRightButton:
|
||||
#ifdef XP_OS2
|
||||
StopTrackingDragGesture();
|
||||
#endif
|
||||
// then fall through...
|
||||
case nsMouseEvent::eMiddleButton:
|
||||
SetClickCount(aPresContext, (nsMouseEvent*)aEvent, aStatus);
|
||||
break;
|
||||
@ -1205,6 +1207,7 @@ nsEventStateManager::PreHandleEvent(nsPresContext* aPresContext,
|
||||
HandleAccessKey(aPresContext, keyEvent, aStatus, nsnull,
|
||||
eAccessKeyProcessingNormal, modifierMask);
|
||||
}
|
||||
// then fall through...
|
||||
case NS_KEY_DOWN:
|
||||
case NS_KEY_UP:
|
||||
{
|
||||
|
@ -157,12 +157,12 @@ public:
|
||||
* Helpers called by various users of Canvas
|
||||
*/
|
||||
|
||||
already_AddRefed<CanvasLayer> GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
already_AddRefed<CanvasLayer> GetCanvasLayer(nsDisplayListBuilder* aBuilder,
|
||||
CanvasLayer *aOldLayer,
|
||||
LayerManager *aManager);
|
||||
|
||||
// Tell the Context that all the current rendering that it's
|
||||
// invalidated has been displayed to the screen, so that it should
|
||||
// start requesting invalidates again as needed.
|
||||
// Any invalidates requested by the context have been processed by updating
|
||||
// the window. Future changes to the canvas need to trigger more invalidation.
|
||||
void MarkContextClean();
|
||||
|
||||
virtual nsXPCClassInfo* GetClassInfo();
|
||||
|
@ -112,6 +112,7 @@ CPPSRCS = \
|
||||
nsHTMLTableSectionElement.cpp \
|
||||
nsHTMLTextAreaElement.cpp \
|
||||
nsHTMLTitleElement.cpp \
|
||||
nsHTMLUnknownElement.cpp \
|
||||
nsDOMValidityState.cpp \
|
||||
nsIConstraintValidation.cpp \
|
||||
$(NULL)
|
||||
|
@ -648,8 +648,11 @@ nsHTMLCanvasElement::InvalidateFrame(const gfxRect* damageRect)
|
||||
if (!frame)
|
||||
return;
|
||||
|
||||
frame->MarkLayersActive();
|
||||
|
||||
nsRect invalRect;
|
||||
nsRect contentArea = frame->GetContentRect();
|
||||
if (damageRect) {
|
||||
nsRect contentArea(frame->GetContentRect());
|
||||
nsIntSize size = GetWidthHeight();
|
||||
|
||||
// damageRect and size are in CSS pixels; contentArea is in appunits
|
||||
@ -661,16 +664,16 @@ nsHTMLCanvasElement::InvalidateFrame(const gfxRect* damageRect)
|
||||
realRect.RoundOut();
|
||||
|
||||
// then make it a nsRect
|
||||
nsRect invalRect(realRect.X(), realRect.Y(),
|
||||
realRect.Width(), realRect.Height());
|
||||
|
||||
// account for border/padding
|
||||
invalRect.MoveBy(contentArea.TopLeft() - frame->GetPosition());
|
||||
|
||||
frame->InvalidateLayer(invalRect, nsDisplayItem::TYPE_CANVAS);
|
||||
invalRect = nsRect(realRect.X(), realRect.Y(),
|
||||
realRect.Width(), realRect.Height());
|
||||
} else {
|
||||
nsRect r(frame->GetContentRect() - frame->GetPosition());
|
||||
frame->InvalidateLayer(r, nsDisplayItem::TYPE_CANVAS);
|
||||
invalRect = nsRect(nsPoint(0, 0), contentArea.Size());
|
||||
}
|
||||
invalRect.MoveBy(contentArea.TopLeft() - frame->GetPosition());
|
||||
|
||||
Layer* layer = frame->InvalidateLayer(invalRect, nsDisplayItem::TYPE_CANVAS);
|
||||
if (layer) {
|
||||
static_cast<CanvasLayer*>(layer)->Updated();
|
||||
}
|
||||
}
|
||||
|
||||
@ -699,13 +702,14 @@ nsHTMLCanvasElement::GetIsOpaque()
|
||||
}
|
||||
|
||||
already_AddRefed<CanvasLayer>
|
||||
nsHTMLCanvasElement::GetCanvasLayer(CanvasLayer *aOldLayer,
|
||||
nsHTMLCanvasElement::GetCanvasLayer(nsDisplayListBuilder* aBuilder,
|
||||
CanvasLayer *aOldLayer,
|
||||
LayerManager *aManager)
|
||||
{
|
||||
if (!mCurrentContext)
|
||||
return nsnull;
|
||||
|
||||
return mCurrentContext->GetCanvasLayer(aOldLayer, aManager);
|
||||
return mCurrentContext->GetCanvasLayer(aBuilder, aOldLayer, aManager);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -95,34 +95,3 @@ NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLSpanElement)
|
||||
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE(nsHTMLSpanElement)
|
||||
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
|
||||
class nsHTMLUnknownElement : public nsHTMLSpanElement
|
||||
{
|
||||
public:
|
||||
nsHTMLUnknownElement(already_AddRefed<nsINodeInfo> aNodeInfo);
|
||||
|
||||
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
|
||||
nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
|
||||
|
||||
virtual nsXPCClassInfo* GetClassInfo();
|
||||
};
|
||||
|
||||
DOMCI_NODE_DATA(HTMLUnknownElement, nsHTMLUnknownElement)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsHTMLUnknownElement)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLUnknownElement)
|
||||
NS_INTERFACE_MAP_END_INHERITING(nsHTMLSpanElement)
|
||||
|
||||
nsHTMLUnknownElement::nsHTMLUnknownElement(already_AddRefed<nsINodeInfo> aNodeInfo)
|
||||
: nsHTMLSpanElement(aNodeInfo)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_NS_NEW_HTML_ELEMENT(Unknown)
|
||||
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE(nsHTMLUnknownElement)
|
||||
|
95
content/html/content/src/nsHTMLUnknownElement.cpp
Normal file
95
content/html/content/src/nsHTMLUnknownElement.cpp
Normal file
@ -0,0 +1,95 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is Mozilla Communicator client code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ms2ger <ms2ger@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsGenericHTMLElement.h"
|
||||
#include "nsIDOMHTMLUnknownElement.h"
|
||||
|
||||
class nsHTMLUnknownElement : public nsGenericHTMLElement
|
||||
, public nsIDOMHTMLUnknownElement
|
||||
{
|
||||
public:
|
||||
nsHTMLUnknownElement(already_AddRefed<nsINodeInfo> aNodeInfo);
|
||||
virtual ~nsHTMLUnknownElement();
|
||||
|
||||
// nsISupports
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
|
||||
// nsIDOMNode
|
||||
NS_FORWARD_NSIDOMNODE(nsGenericHTMLElement::)
|
||||
|
||||
// nsIDOMElement
|
||||
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLElement::)
|
||||
|
||||
// nsIDOMHTMLElement
|
||||
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLElement::)
|
||||
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
|
||||
|
||||
virtual nsXPCClassInfo* GetClassInfo();
|
||||
};
|
||||
|
||||
|
||||
NS_IMPL_NS_NEW_HTML_ELEMENT(Unknown)
|
||||
|
||||
|
||||
nsHTMLUnknownElement::nsHTMLUnknownElement(already_AddRefed<nsINodeInfo> aNodeInfo)
|
||||
: nsGenericHTMLElement(aNodeInfo)
|
||||
{
|
||||
}
|
||||
|
||||
nsHTMLUnknownElement::~nsHTMLUnknownElement()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(nsHTMLUnknownElement, nsGenericElement)
|
||||
NS_IMPL_RELEASE_INHERITED(nsHTMLUnknownElement, nsGenericElement)
|
||||
|
||||
|
||||
DOMCI_NODE_DATA(HTMLUnknownElement, nsHTMLUnknownElement)
|
||||
|
||||
// QueryInterface implementation for nsHTMLUnknownElement
|
||||
NS_INTERFACE_TABLE_HEAD(nsHTMLUnknownElement)
|
||||
NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLUnknownElement,
|
||||
nsIDOMHTMLUnknownElement)
|
||||
NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLUnknownElement,
|
||||
nsGenericHTMLElement)
|
||||
NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLUnknownElement)
|
||||
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE(nsHTMLUnknownElement)
|
@ -226,6 +226,7 @@ _TEST_FILES = \
|
||||
test_bug557087-5.html \
|
||||
test_bug557087-6.html \
|
||||
test_bug586763.html \
|
||||
test_bug587469.html \
|
||||
test_bug598643.html \
|
||||
test_bug596350.html \
|
||||
test_bug600155.html \
|
||||
|
@ -263,6 +263,10 @@ for each (var tag in allTags) {
|
||||
"Unexpected classname for " + tagName(tag));
|
||||
is(node instanceof window[classInfoString], true,
|
||||
tagName(tag) + " not an instance of " + classInfos[tag]);
|
||||
is(node instanceof HTMLUnknownElement, false,
|
||||
tagName(tag) + " is an instance of HTMLUnknownElement");
|
||||
is(node instanceof Components.interfaces.nsIDOMHTMLUnknownElement, false,
|
||||
tagName(tag) + " is an instance of nsIDOMHTMLUnknownElement");
|
||||
|
||||
// Check that each node QIs to all the things we expect it to QI to
|
||||
for each (var iface in interfaces[tag].concat(interfacesNonClassinfo[tag])) {
|
||||
|
39
content/html/content/test/test_bug587469.html
Normal file
39
content/html/content/test/test_bug587469.html
Normal file
@ -0,0 +1,39 @@
|
||||
<!-- Quirks -->
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=587469
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 587469</title>
|
||||
<script src="/MochiKit/packed.js"></script>
|
||||
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script src="/tests/SimpleTest/EventUtils.js"></script>
|
||||
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=587469">Mozilla Bug 587469</a>
|
||||
<p id="display">
|
||||
<map name=a></map>
|
||||
<map name=a><area shape=rect coords=25,25,75,75 href=#fail></map>
|
||||
<img usemap=#a src=image.png>
|
||||
</p>
|
||||
<div id="content" style="display: none">
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
/** Test for Bug 587469 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
function finish() {
|
||||
is(location.hash, "", "Should not have changed the hash.");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
SimpleTest.waitForFocus(function() {
|
||||
synthesizeMouse(document.getElementsByTagName("img")[0], 50, 50, {});
|
||||
setTimeout(finish, 50); // Sorry!
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
@ -1165,7 +1165,6 @@ nsHTMLDocument::GetImageMap(const nsAString& aMapName)
|
||||
mImageMaps = new nsContentList(this, kNameSpaceID_XHTML, nsGkAtoms::map, nsGkAtoms::map);
|
||||
}
|
||||
|
||||
nsIDOMHTMLMapElement* firstMatch = nsnull;
|
||||
nsAutoString name;
|
||||
PRUint32 i, n = mImageMaps->Length(PR_TRUE);
|
||||
for (i = 0; i < n; ++i) {
|
||||
@ -1187,27 +1186,11 @@ nsHTMLDocument::GetImageMap(const nsAString& aMapName)
|
||||
}
|
||||
|
||||
if (match) {
|
||||
// Quirk: if the first matching map is empty, remember it, but keep
|
||||
// searching for a non-empty one, only use it if none was found (bug 264624).
|
||||
if (mCompatMode == eCompatibility_NavQuirks) {
|
||||
nsCOMPtr<nsIDOMHTMLCollection> mapAreas;
|
||||
rv = map->GetAreas(getter_AddRefs(mapAreas));
|
||||
if (NS_SUCCEEDED(rv) && mapAreas) {
|
||||
PRUint32 length = 0;
|
||||
mapAreas->GetLength(&length);
|
||||
if (length == 0) {
|
||||
if (!firstMatch) {
|
||||
firstMatch = map;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
||||
return firstMatch;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -71,6 +71,14 @@ nsSMILKeySpline::GetSplineValue(double aX) const
|
||||
return CalcBezier(GetTForX(aX), mY1, mY2);
|
||||
}
|
||||
|
||||
void
|
||||
nsSMILKeySpline::GetSplineDerivativeValues(double aX, double& aDX, double& aDY) const
|
||||
{
|
||||
double t = GetTForX(aX);
|
||||
aDX = GetSlope(t, mX1, mX2);
|
||||
aDY = GetSlope(t, mY1, mY2);
|
||||
}
|
||||
|
||||
void
|
||||
nsSMILKeySpline::CalcSampleValues()
|
||||
{
|
||||
|
@ -69,6 +69,8 @@ public:
|
||||
*/
|
||||
double GetSplineValue(double aX) const;
|
||||
|
||||
void GetSplineDerivativeValues(double aX, double& aDX, double& aDY) const;
|
||||
|
||||
private:
|
||||
void
|
||||
CalcSampleValues();
|
||||
|
@ -896,6 +896,10 @@ nsXBLPrototypeBinding::LocateInstance(nsIContent* aBoundElement,
|
||||
binding = binding->GetBaseBinding();
|
||||
}
|
||||
|
||||
NS_ABORT_IF_FALSE(binding, "Bug 620181 this is unexpected");
|
||||
if (!binding)
|
||||
return nsnull;
|
||||
|
||||
nsInsertionPointList* points = nsnull;
|
||||
if (anonContent == copyParent)
|
||||
binding->GetInsertionPointsFor(aBoundElement, &points);
|
||||
|
@ -316,6 +316,7 @@ txXPCOMExtensionFunctionCall::GetParamType(const nsXPTParamInfo &aParam,
|
||||
return eOBJECT;
|
||||
}
|
||||
}
|
||||
// FALLTHROUGH
|
||||
default:
|
||||
{
|
||||
// XXX Error!
|
||||
|
@ -423,7 +423,7 @@ TestNode::Constrain(InstantiationSet& aInstantiations)
|
||||
rv = FilterInstantiations(aInstantiations, &cantHandleYet);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
if ((mParent && ! aInstantiations.Empty()) || cantHandleYet) {
|
||||
if (mParent && (!aInstantiations.Empty() || cantHandleYet)) {
|
||||
// if we still have instantiations, or if the instantiations
|
||||
// could not be filled in yet, then ride 'em on up to the
|
||||
// parent to narrow them.
|
||||
|
@ -4843,6 +4843,12 @@ nsDocShell::SetIsActive(PRBool aIsActive)
|
||||
if (pshell)
|
||||
pshell->SetIsActive(aIsActive);
|
||||
|
||||
// Tell the window about it
|
||||
nsCOMPtr<nsPIDOMWindow> win = do_QueryInterface(mScriptGlobal);
|
||||
if (win) {
|
||||
win->SetIsBackground(!aIsActive);
|
||||
}
|
||||
|
||||
// Recursively tell all of our children
|
||||
PRInt32 n = mChildList.Count();
|
||||
for (PRInt32 i = 0; i < n; ++i) {
|
||||
|
@ -314,6 +314,7 @@
|
||||
#include "nsIDOMNSHTMLTextAreaElement.h"
|
||||
#include "nsIDOMHTMLTitleElement.h"
|
||||
#include "nsIDOMHTMLUListElement.h"
|
||||
#include "nsIDOMHTMLUnknownElement.h"
|
||||
#include "nsIDOMMediaError.h"
|
||||
#include "nsIDOMTimeRanges.h"
|
||||
#include "nsIDOMHTMLSourceElement.h"
|
||||
@ -2825,8 +2826,8 @@ nsDOMClassInfo::Init()
|
||||
DOM_CLASSINFO_GENERIC_HTML_MAP_ENTRIES
|
||||
DOM_CLASSINFO_MAP_END
|
||||
|
||||
DOM_CLASSINFO_MAP_BEGIN_NO_CLASS_IF(HTMLUnknownElement, nsIDOMHTMLElement)
|
||||
DOM_CLASSINFO_MAP_ENTRY(nsIDOMHTMLElement)
|
||||
DOM_CLASSINFO_MAP_BEGIN(HTMLUnknownElement, nsIDOMHTMLUnknownElement)
|
||||
DOM_CLASSINFO_MAP_ENTRY(nsIDOMHTMLUnknownElement)
|
||||
DOM_CLASSINFO_GENERIC_HTML_MAP_ENTRIES
|
||||
DOM_CLASSINFO_MAP_END
|
||||
|
||||
|
@ -272,9 +272,14 @@ static PRBool gDOMWindowDumpEnabled = PR_FALSE;
|
||||
|
||||
// The default shortest interval/timeout we permit
|
||||
#define DEFAULT_MIN_TIMEOUT_VALUE 10 // 10ms
|
||||
#define DEFAULT_MIN_BACKGROUND_TIMEOUT_VALUE 1000 // 1000ms
|
||||
static PRInt32 gMinTimeoutValue;
|
||||
static inline PRInt32 DOMMinTimeoutValue() {
|
||||
return NS_MAX(gMinTimeoutValue, 0);
|
||||
static PRInt32 gMinBackgroundTimeoutValue;
|
||||
inline PRInt32
|
||||
nsGlobalWindow::DOMMinTimeoutValue() const {
|
||||
PRBool isBackground = !mOuterWindow || mOuterWindow->IsBackground();
|
||||
return
|
||||
NS_MAX(isBackground ? gMinBackgroundTimeoutValue : gMinTimeoutValue, 0);
|
||||
}
|
||||
|
||||
// The number of nested timeouts before we start clamping. HTML5 says 1, WebKit
|
||||
@ -746,7 +751,8 @@ nsPIDOMWindow::nsPIDOMWindow(nsPIDOMWindow *aOuterWindow)
|
||||
mIsHandlingResizeEvent(PR_FALSE), mIsInnerWindow(aOuterWindow != nsnull),
|
||||
mMayHavePaintEventListener(PR_FALSE), mMayHaveTouchEventListener(PR_FALSE),
|
||||
mMayHaveAudioAvailableEventListener(PR_FALSE), mIsModalContentWindow(PR_FALSE),
|
||||
mIsActive(PR_FALSE), mInnerWindow(nsnull), mOuterWindow(aOuterWindow),
|
||||
mIsActive(PR_FALSE), mIsBackground(PR_FALSE),
|
||||
mInnerWindow(nsnull), mOuterWindow(aOuterWindow),
|
||||
// Make sure no actual window ends up with mWindowID == 0
|
||||
mWindowID(++gNextWindowID), mHasNotifiedGlobalCreated(PR_FALSE)
|
||||
{}
|
||||
@ -895,6 +901,9 @@ nsGlobalWindow::nsGlobalWindow(nsGlobalWindow *aOuterWindow)
|
||||
nsContentUtils::AddIntPrefVarCache("dom.min_timeout_value",
|
||||
&gMinTimeoutValue,
|
||||
DEFAULT_MIN_TIMEOUT_VALUE);
|
||||
nsContentUtils::AddIntPrefVarCache("dom.min_background_timeout_value",
|
||||
&gMinBackgroundTimeoutValue,
|
||||
DEFAULT_MIN_BACKGROUND_TIMEOUT_VALUE);
|
||||
}
|
||||
|
||||
if (gDumpFile == nsnull) {
|
||||
@ -2458,6 +2467,10 @@ nsGlobalWindow::SetDocShell(nsIDocShell* aDocShell)
|
||||
}
|
||||
else NS_NewWindowRoot(this, getter_AddRefs(mChromeEventHandler));
|
||||
}
|
||||
|
||||
PRBool docShellActive;
|
||||
mDocShell->GetIsActive(&docShellActive);
|
||||
mIsBackground = !docShellActive;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4395,8 +4408,19 @@ nsGlobalWindow::SetFullScreen(PRBool aFullScreen)
|
||||
mFullScreen = aFullScreen;
|
||||
|
||||
nsCOMPtr<nsIWidget> widget = GetMainWidget();
|
||||
if (widget)
|
||||
if (widget) {
|
||||
PRBool visible;
|
||||
widget->IsVisible(visible);
|
||||
if (visible && aFullScreen)
|
||||
widget->Show(PR_FALSE);
|
||||
widget->MakeFullScreen(aFullScreen);
|
||||
if (visible && aFullScreen) {
|
||||
widget->Show(PR_TRUE);
|
||||
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
|
||||
if (fm)
|
||||
fm->SetActiveWindow(this);
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@ -8731,18 +8755,14 @@ nsGlobalWindow::SetTimeoutOrInterval(nsIScriptTimeoutHandler *aHandler,
|
||||
}
|
||||
|
||||
PRUint32 nestingLevel = sNestingLevel + 1;
|
||||
if (interval < DOMMinTimeoutValue()) {
|
||||
if (aIsInterval || nestingLevel >= DOM_CLAMP_TIMEOUT_NESTING_LEVEL) {
|
||||
// Don't allow timeouts less than DOMMinTimeoutValue() from
|
||||
// now...
|
||||
|
||||
interval = DOMMinTimeoutValue();;
|
||||
}
|
||||
else if (interval < 0) {
|
||||
// Clamp negative intervals to 0.
|
||||
|
||||
interval = 0;
|
||||
}
|
||||
if (aIsInterval || nestingLevel >= DOM_CLAMP_TIMEOUT_NESTING_LEVEL) {
|
||||
// Don't allow timeouts less than DOMMinTimeoutValue() from
|
||||
// now...
|
||||
interval = NS_MAX(interval, DOMMinTimeoutValue());
|
||||
}
|
||||
else if (interval < 0) {
|
||||
// Clamp negative intervals to 0.
|
||||
interval = 0;
|
||||
}
|
||||
|
||||
NS_ASSERTION(interval >= 0, "DOMMinTimeoutValue() lies");
|
||||
|
@ -822,6 +822,8 @@ protected:
|
||||
|
||||
PRBool GetIsTabModalPromptAllowed();
|
||||
|
||||
inline PRInt32 DOMMinTimeoutValue() const;
|
||||
|
||||
// When adding new member variables, be careful not to create cycles
|
||||
// through JavaScript. If there is any chance that a member variable
|
||||
// could own objects that are implemented in JavaScript, then those
|
||||
|
@ -102,6 +102,16 @@ public:
|
||||
return mIsActive;
|
||||
}
|
||||
|
||||
void SetIsBackground(PRBool aIsBackground)
|
||||
{
|
||||
mIsBackground = aIsBackground;
|
||||
}
|
||||
|
||||
PRBool IsBackground()
|
||||
{
|
||||
return mIsBackground;
|
||||
}
|
||||
|
||||
nsPIDOMEventTarget* GetChromeEventHandler() const
|
||||
{
|
||||
return mChromeEventHandler;
|
||||
@ -608,8 +618,14 @@ protected:
|
||||
PRPackedBool mIsModalContentWindow;
|
||||
|
||||
// Tracks activation state that's used for :-moz-window-inactive.
|
||||
// Only used on outer windows.
|
||||
PRPackedBool mIsActive;
|
||||
|
||||
// Tracks whether our docshell is active. If it is, mIsBackground
|
||||
// is false. Too bad we have so many different concepts of
|
||||
// "active". Only used on outer windows.
|
||||
PRPackedBool mIsBackground;
|
||||
|
||||
// And these are the references between inner and outer windows.
|
||||
nsPIDOMWindow *mInnerWindow;
|
||||
nsCOMPtr<nsPIDOMWindow> mOuterWindow;
|
||||
|
@ -117,6 +117,7 @@ SDK_XPIDLSRCS = \
|
||||
|
||||
XPIDLSRCS = \
|
||||
nsIDOMHTMLCanvasElement.idl \
|
||||
nsIDOMHTMLUnknownElement.idl \
|
||||
nsIDOMNSHTMLDocument.idl \
|
||||
nsIDOMNSHTMLElement.idl \
|
||||
nsIDOMNSHTMLFormElement.idl \
|
||||
|
49
dom/interfaces/html/nsIDOMHTMLUnknownElement.idl
Normal file
49
dom/interfaces/html/nsIDOMHTMLUnknownElement.idl
Normal file
@ -0,0 +1,49 @@
|
||||
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Ms2ger <ms2ger@gmail.com>.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsIDOMHTMLElement.idl"
|
||||
|
||||
/**
|
||||
* The nsIDOMHTMLUnknownElement interface is the interface to an unknown HTML
|
||||
* element.
|
||||
*
|
||||
* @see <http://www.whatwg.org/html/#htmlunknownelement>
|
||||
*/
|
||||
[scriptable, uuid(13d29c53-a9a6-45b8-bb69-e5294bb6e09e)]
|
||||
interface nsIDOMHTMLUnknownElement : nsIDOMHTMLElement
|
||||
{
|
||||
};
|
@ -88,6 +88,8 @@
|
||||
|
||||
#include "mozilla/dom/ExternalHelperAppParent.h"
|
||||
#include "mozilla/dom/StorageParent.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "mozilla/unused.h"
|
||||
#include "nsAccelerometer.h"
|
||||
|
||||
#include "nsIMemoryReporter.h"
|
||||
@ -108,6 +110,7 @@ using namespace mozilla::ipc;
|
||||
using namespace mozilla::net;
|
||||
using namespace mozilla::places;
|
||||
using mozilla::MonitorAutoEnter;
|
||||
using mozilla::unused; // heh
|
||||
using base::KillProcess;
|
||||
|
||||
namespace mozilla {
|
||||
@ -157,39 +160,38 @@ ContentParent::GetSingleton(PRBool aForceNew)
|
||||
|
||||
if (!gSingleton && aForceNew) {
|
||||
nsRefPtr<ContentParent> parent = new ContentParent();
|
||||
if (parent) {
|
||||
nsCOMPtr<nsIObserverService> obs =
|
||||
do_GetService("@mozilla.org/observer-service;1");
|
||||
if (obs) {
|
||||
if (NS_SUCCEEDED(obs->AddObserver(parent, "xpcom-shutdown",
|
||||
PR_FALSE))) {
|
||||
gSingleton = parent;
|
||||
nsCOMPtr<nsIPrefBranch2> prefs
|
||||
(do_GetService(NS_PREFSERVICE_CONTRACTID));
|
||||
if (prefs) {
|
||||
prefs->AddObserver("", parent, PR_FALSE);
|
||||
}
|
||||
}
|
||||
obs->AddObserver(
|
||||
parent, NS_IPC_IOSERVICE_SET_OFFLINE_TOPIC, PR_FALSE);
|
||||
|
||||
obs->AddObserver(parent, "child-memory-reporter-request", PR_FALSE);
|
||||
obs->AddObserver(parent, "memory-pressure", PR_FALSE);
|
||||
}
|
||||
nsCOMPtr<nsIThreadInternal>
|
||||
threadInt(do_QueryInterface(NS_GetCurrentThread()));
|
||||
if (threadInt) {
|
||||
threadInt->GetObserver(getter_AddRefs(parent->mOldObserver));
|
||||
threadInt->SetObserver(parent);
|
||||
}
|
||||
if (obs) {
|
||||
obs->NotifyObservers(nsnull, "ipc:content-created", nsnull);
|
||||
}
|
||||
}
|
||||
gSingleton = parent;
|
||||
parent->Init();
|
||||
}
|
||||
|
||||
return gSingleton;
|
||||
}
|
||||
|
||||
void
|
||||
ContentParent::Init()
|
||||
{
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (obs) {
|
||||
obs->AddObserver(this, "xpcom-shutdown", PR_FALSE);
|
||||
obs->AddObserver(this, NS_IPC_IOSERVICE_SET_OFFLINE_TOPIC, PR_FALSE);
|
||||
obs->AddObserver(this, "child-memory-reporter-request", PR_FALSE);
|
||||
obs->AddObserver(this, "memory-pressure", PR_FALSE);
|
||||
}
|
||||
nsCOMPtr<nsIPrefBranch2> prefs(do_GetService(NS_PREFSERVICE_CONTRACTID));
|
||||
if (prefs) {
|
||||
prefs->AddObserver("", this, PR_FALSE);
|
||||
}
|
||||
nsCOMPtr<nsIThreadInternal>
|
||||
threadInt(do_QueryInterface(NS_GetCurrentThread()));
|
||||
if (threadInt) {
|
||||
threadInt->GetObserver(getter_AddRefs(mOldObserver));
|
||||
threadInt->SetObserver(this);
|
||||
}
|
||||
if (obs) {
|
||||
obs->NotifyObservers(nsnull, "ipc:content-created", nsnull);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ContentParent::OnChannelConnected(int32 pid)
|
||||
{
|
||||
@ -237,8 +239,7 @@ ContentParent::ActorDestroy(ActorDestroyReason why)
|
||||
{
|
||||
nsCOMPtr<nsIThreadObserver>
|
||||
kungFuDeathGrip(static_cast<nsIThreadObserver*>(this));
|
||||
nsCOMPtr<nsIObserverService>
|
||||
obs(do_GetService("@mozilla.org/observer-service;1"));
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (obs) {
|
||||
obs->RemoveObserver(static_cast<nsIObserver*>(this), "xpcom-shutdown");
|
||||
obs->RemoveObserver(static_cast<nsIObserver*>(this), "memory-pressure");
|
||||
@ -537,7 +538,7 @@ ContentParent::Observe(nsISupports* aSubject,
|
||||
|
||||
// listening for memory pressure event
|
||||
if (!strcmp(aTopic, "memory-pressure")) {
|
||||
SendFlushMemory(nsDependentString(aData));
|
||||
unused << SendFlushMemory(nsDependentString(aData));
|
||||
}
|
||||
// listening for remotePrefs...
|
||||
else if (!strcmp(aTopic, "nsPref:changed")) {
|
||||
@ -1041,7 +1042,7 @@ ContentParent::RecvRemoveAccelerometerListener()
|
||||
NS_IMETHODIMP
|
||||
ContentParent::HandleEvent(nsIDOMGeoPosition* postion)
|
||||
{
|
||||
SendGeolocationUpdate(GeoPosition(postion));
|
||||
unused << SendGeolocationUpdate(GeoPosition(postion));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -1088,8 +1089,7 @@ ContentParent::OnAccelerationChange(nsIAcceleration *aAcceleration)
|
||||
aAcceleration->GetY(&y);
|
||||
aAcceleration->GetZ(&z);
|
||||
|
||||
mozilla::dom::ContentParent::GetSingleton()->
|
||||
SendAccelerationChanged(x, y, z);
|
||||
unused << SendAccelerationChanged(x, y, z);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -118,6 +118,8 @@ private:
|
||||
ContentParent();
|
||||
virtual ~ContentParent();
|
||||
|
||||
void Init();
|
||||
|
||||
virtual PBrowserParent* AllocPBrowser(const PRUint32& aChromeFlags);
|
||||
virtual bool DeallocPBrowser(PBrowserParent* frame);
|
||||
|
||||
|
@ -964,6 +964,13 @@ TabChildGlobal::TabChildGlobal(TabChild* aTabChild)
|
||||
aTabChild->GetJSContext());
|
||||
}
|
||||
|
||||
TabChildGlobal::~TabChildGlobal()
|
||||
{
|
||||
if (mListenerManager) {
|
||||
mListenerManager->Disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(TabChildGlobal)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(TabChildGlobal,
|
||||
|
@ -94,6 +94,7 @@ class TabChildGlobal : public nsDOMEventTargetHelper,
|
||||
{
|
||||
public:
|
||||
TabChildGlobal(TabChild* aTabChild);
|
||||
~TabChildGlobal();
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(TabChildGlobal, nsDOMEventTargetHelper)
|
||||
NS_FORWARD_SAFE_NSIFRAMEMESSAGEMANAGER(mMessageManager)
|
||||
|
@ -99,7 +99,3 @@ ifndef GNU_CC
|
||||
DEFINES += -D_TIME_H=1
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(OS_ARCH), OpenVMS)
|
||||
DEFINES += -DGENERIC_MOTIF_REDEFINES
|
||||
endif
|
||||
|
@ -974,9 +974,6 @@ nsFind::Find(const PRUnichar *aPatText, nsIDOMRange* aSearchRange,
|
||||
// (only matters when we're matching)
|
||||
PRBool inWhitespace = PR_FALSE;
|
||||
|
||||
// Have we extended a search past the endpoint?
|
||||
PRBool continuing = PR_FALSE;
|
||||
|
||||
// Place to save the range start point in case we find a match:
|
||||
nsCOMPtr<nsIDOMNode> matchAnchorNode;
|
||||
PRInt32 matchAnchorOffset = 0;
|
||||
@ -1004,7 +1001,7 @@ nsFind::Find(const PRUnichar *aPatText, nsIDOMRange* aSearchRange,
|
||||
{
|
||||
// Are we in the middle of a match?
|
||||
// If so, try again with continuation.
|
||||
if (matchAnchorNode && !continuing)
|
||||
if (matchAnchorNode)
|
||||
NextNode(aSearchRange, aStartPoint, aEndPoint, PR_TRUE);
|
||||
|
||||
// Reset the iterator, so this nsFind will be usable if
|
||||
@ -1125,7 +1122,7 @@ nsFind::Find(const PRUnichar *aPatText, nsIDOMRange* aSearchRange,
|
||||
|
||||
// Have we gone past the endpoint yet?
|
||||
// If we have, and we're not in the middle of a match, return.
|
||||
if (mIterNode == endNode && !continuing &&
|
||||
if (mIterNode == endNode &&
|
||||
((mFindBackward && (findex < endOffset)) ||
|
||||
(!mFindBackward && (findex > endOffset))))
|
||||
{
|
||||
@ -1278,11 +1275,6 @@ nsFind::Find(const PRUnichar *aPatText, nsIDOMRange* aSearchRange,
|
||||
#ifdef DEBUG_FIND
|
||||
printf("NOT: %c == %c\n", c, patc);
|
||||
#endif
|
||||
// If we were continuing, then this ends our search.
|
||||
if (continuing) {
|
||||
ResetAll();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// If we didn't match, go back to the beginning of patStr,
|
||||
// and set findex back to the next char after
|
||||
|
@ -1176,13 +1176,20 @@ public:
|
||||
virtual void Initialize(const Data& aData) = 0;
|
||||
|
||||
/**
|
||||
* CONSTRUCTION PHASE ONLY
|
||||
* Notify this CanvasLayer that the rectangle given by aRect
|
||||
* has been updated, and any work that needs to be done
|
||||
* to bring the contents from the Surface/GLContext to the
|
||||
* Layer in preparation for compositing should be performed.
|
||||
* Notify this CanvasLayer that the canvas surface contents have
|
||||
* changed (or will change) before the next transaction.
|
||||
*/
|
||||
virtual void Updated(const nsIntRect& aRect) = 0;
|
||||
void Updated() { mDirty = PR_TRUE; }
|
||||
|
||||
/**
|
||||
* Register a callback to be called at the end of each transaction.
|
||||
*/
|
||||
typedef void (* DidTransactionCallback)(void* aClosureData);
|
||||
void SetDidTransactionCallback(DidTransactionCallback aCallback, void* aClosureData)
|
||||
{
|
||||
mCallback = aCallback;
|
||||
mCallbackData = aClosureData;
|
||||
}
|
||||
|
||||
/**
|
||||
* CONSTRUCTION PHASE ONLY
|
||||
@ -1207,15 +1214,30 @@ public:
|
||||
|
||||
protected:
|
||||
CanvasLayer(LayerManager* aManager, void* aImplData)
|
||||
: Layer(aManager, aImplData), mFilter(gfxPattern::FILTER_GOOD) {}
|
||||
: Layer(aManager, aImplData),
|
||||
mCallback(nsnull), mCallbackData(nsnull), mFilter(gfxPattern::FILTER_GOOD),
|
||||
mDirty(PR_FALSE) {}
|
||||
|
||||
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
|
||||
|
||||
void FireDidTransactionCallback()
|
||||
{
|
||||
if (mCallback) {
|
||||
mCallback(mCallbackData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 0, 0, canvaswidth, canvasheight
|
||||
*/
|
||||
nsIntRect mBounds;
|
||||
DidTransactionCallback mCallback;
|
||||
void* mCallbackData;
|
||||
gfxPattern::GraphicsFilter mFilter;
|
||||
/**
|
||||
* Set to true in Updated(), cleared during a transaction.
|
||||
*/
|
||||
PRPackedBool mDirty;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -893,7 +893,6 @@ public:
|
||||
}
|
||||
|
||||
virtual void Initialize(const Data& aData);
|
||||
virtual void Updated(const nsIntRect& aRect);
|
||||
virtual void Paint(gfxContext* aContext);
|
||||
|
||||
virtual void PaintWithOpacity(gfxContext* aContext,
|
||||
@ -904,13 +903,12 @@ protected:
|
||||
{
|
||||
return static_cast<BasicLayerManager*>(mManager);
|
||||
}
|
||||
void UpdateSurface();
|
||||
|
||||
nsRefPtr<gfxASurface> mSurface;
|
||||
nsRefPtr<mozilla::gl::GLContext> mGLContext;
|
||||
PRUint32 mCanvasFramebuffer;
|
||||
|
||||
nsIntRect mUpdatedRect;
|
||||
|
||||
PRPackedBool mGLBufferIsPremultiplied;
|
||||
PRPackedBool mNeedsYFlip;
|
||||
};
|
||||
@ -920,8 +918,6 @@ BasicCanvasLayer::Initialize(const Data& aData)
|
||||
{
|
||||
NS_ASSERTION(mSurface == nsnull, "BasicCanvasLayer::Initialize called twice!");
|
||||
|
||||
mUpdatedRect.Empty();
|
||||
|
||||
if (aData.mSurface) {
|
||||
mSurface = aData.mSurface;
|
||||
NS_ASSERTION(aData.mGLContext == nsnull,
|
||||
@ -941,12 +937,11 @@ BasicCanvasLayer::Initialize(const Data& aData)
|
||||
}
|
||||
|
||||
void
|
||||
BasicCanvasLayer::Updated(const nsIntRect& aRect)
|
||||
BasicCanvasLayer::UpdateSurface()
|
||||
{
|
||||
NS_ASSERTION(mUpdatedRect.IsEmpty(),
|
||||
"CanvasLayer::Updated called more than once in a transaction!");
|
||||
|
||||
mUpdatedRect.UnionRect(mUpdatedRect, aRect);
|
||||
if (!mDirty)
|
||||
return;
|
||||
mDirty = PR_FALSE;
|
||||
|
||||
if (mGLContext) {
|
||||
nsRefPtr<gfxImageSurface> isurf =
|
||||
@ -976,9 +971,6 @@ BasicCanvasLayer::Updated(const nsIntRect& aRect)
|
||||
if (currentFramebuffer != mCanvasFramebuffer)
|
||||
mGLContext->fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, mCanvasFramebuffer);
|
||||
|
||||
// For simplicity, we read the entire framebuffer for now -- in
|
||||
// the future we should use mUpdatedRect, though with WebGL we don't
|
||||
// have an easy way to generate one.
|
||||
mGLContext->ReadPixelsIntoImageSurface(0, 0,
|
||||
mBounds.width, mBounds.height,
|
||||
isurf);
|
||||
@ -997,15 +989,13 @@ BasicCanvasLayer::Updated(const nsIntRect& aRect)
|
||||
// stick our surface into mSurface, so that the Paint() path is the same
|
||||
mSurface = isurf;
|
||||
}
|
||||
|
||||
// sanity
|
||||
NS_ASSERTION(mUpdatedRect.IsEmpty() || mBounds.Contains(mUpdatedRect),
|
||||
"CanvasLayer: Updated rect bigger than bounds!");
|
||||
}
|
||||
|
||||
void
|
||||
BasicCanvasLayer::Paint(gfxContext* aContext)
|
||||
{
|
||||
UpdateSurface();
|
||||
FireDidTransactionCallback();
|
||||
PaintWithOpacity(aContext, GetEffectiveOpacity());
|
||||
}
|
||||
|
||||
@ -1037,8 +1027,6 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext,
|
||||
if (mNeedsYFlip) {
|
||||
aContext->SetMatrix(m);
|
||||
}
|
||||
|
||||
mUpdatedRect.Empty();
|
||||
}
|
||||
|
||||
class BasicReadbackLayer : public ReadbackLayer,
|
||||
@ -2557,9 +2545,6 @@ public:
|
||||
|
||||
virtual void Initialize(const Data& aData);
|
||||
|
||||
virtual void Updated(const nsIntRect& aRect)
|
||||
{}
|
||||
|
||||
virtual already_AddRefed<gfxSharedImageSurface>
|
||||
Swap(gfxSharedImageSurface* newFront);
|
||||
|
||||
|
@ -114,8 +114,12 @@ CanvasLayerD3D10::Initialize(const Data& aData)
|
||||
}
|
||||
|
||||
void
|
||||
CanvasLayerD3D10::Updated(const nsIntRect& aRect)
|
||||
CanvasLayerD3D10::UpdateSurface()
|
||||
{
|
||||
if (!mDirty)
|
||||
return;
|
||||
mDirty = PR_FALSE;
|
||||
|
||||
if (mIsD2DTexture) {
|
||||
mSurface->Flush();
|
||||
return;
|
||||
@ -161,9 +165,6 @@ CanvasLayerD3D10::Updated(const nsIntRect& aRect)
|
||||
if (currentFramebuffer != mCanvasFramebuffer)
|
||||
mGLContext->fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, mCanvasFramebuffer);
|
||||
|
||||
// For simplicity, we read the entire framebuffer for now -- in
|
||||
// the future we should use aRect, though with WebGL we don't
|
||||
// have an easy way to generate one.
|
||||
nsRefPtr<gfxImageSurface> tmpSurface =
|
||||
new gfxImageSurface(destination,
|
||||
gfxIntSize(mBounds.width, mBounds.height),
|
||||
@ -189,10 +190,10 @@ CanvasLayerD3D10::Updated(const nsIntRect& aRect)
|
||||
mTexture->Unmap(0);
|
||||
} else if (mSurface) {
|
||||
RECT r;
|
||||
r.left = aRect.x;
|
||||
r.top = aRect.y;
|
||||
r.right = aRect.XMost();
|
||||
r.bottom = aRect.YMost();
|
||||
r.left = 0;
|
||||
r.top = 0;
|
||||
r.right = mBounds.width;
|
||||
r.bottom = mBounds.height;
|
||||
|
||||
D3D10_MAPPED_TEXTURE2D map;
|
||||
HRESULT hr = mTexture->Map(0, D3D10_MAP_WRITE_DISCARD, 0, &map);
|
||||
@ -202,17 +203,13 @@ CanvasLayerD3D10::Updated(const nsIntRect& aRect)
|
||||
return;
|
||||
}
|
||||
|
||||
PRUint8 *startBits;
|
||||
PRUint32 sourceStride;
|
||||
|
||||
nsRefPtr<gfxImageSurface> dstSurface;
|
||||
|
||||
dstSurface = new gfxImageSurface((unsigned char*)map.pData,
|
||||
gfxIntSize(aRect.width, aRect.height),
|
||||
gfxIntSize(mBounds.width, mBounds.height),
|
||||
map.RowPitch,
|
||||
gfxASurface::ImageFormatARGB32);
|
||||
nsRefPtr<gfxContext> ctx = new gfxContext(dstSurface);
|
||||
ctx->Translate(gfxPoint(-aRect.x, -aRect.y));
|
||||
ctx->SetOperator(gfxContext::OPERATOR_SOURCE);
|
||||
ctx->SetSource(mSurface);
|
||||
ctx->Paint();
|
||||
@ -230,9 +227,11 @@ CanvasLayerD3D10::GetLayer()
|
||||
void
|
||||
CanvasLayerD3D10::RenderLayer()
|
||||
{
|
||||
if (!mTexture) {
|
||||
UpdateSurface();
|
||||
FireDidTransactionCallback();
|
||||
|
||||
if (!mTexture)
|
||||
return;
|
||||
}
|
||||
|
||||
nsIntRect visibleRect = mVisibleRegion.GetBounds();
|
||||
|
||||
|
@ -64,7 +64,6 @@ public:
|
||||
|
||||
// CanvasLayer implementation
|
||||
virtual void Initialize(const Data& aData);
|
||||
virtual void Updated(const nsIntRect& aRect);
|
||||
|
||||
// LayerD3D10 implementation
|
||||
virtual Layer* GetLayer();
|
||||
@ -73,6 +72,8 @@ public:
|
||||
private:
|
||||
typedef mozilla::gl::GLContext GLContext;
|
||||
|
||||
void UpdateSurface();
|
||||
|
||||
nsRefPtr<gfxASurface> mSurface;
|
||||
nsRefPtr<GLContext> mGLContext;
|
||||
nsRefPtr<ID3D10Texture2D> mTexture;
|
||||
|
@ -79,8 +79,12 @@ CanvasLayerD3D9::Initialize(const Data& aData)
|
||||
}
|
||||
|
||||
void
|
||||
CanvasLayerD3D9::Updated(const nsIntRect& aRect)
|
||||
CanvasLayerD3D9::UpdateSurface()
|
||||
{
|
||||
if (!mDirty)
|
||||
return;
|
||||
mDirty = PR_FALSE;
|
||||
|
||||
if (!mTexture) {
|
||||
CreateTexture();
|
||||
NS_WARNING("CanvasLayerD3D9::Updated called but no texture present!");
|
||||
@ -117,9 +121,6 @@ CanvasLayerD3D9::Updated(const nsIntRect& aRect)
|
||||
if (currentFramebuffer != mCanvasFramebuffer)
|
||||
mGLContext->fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, mCanvasFramebuffer);
|
||||
|
||||
// For simplicity, we read the entire framebuffer for now -- in
|
||||
// the future we should use aRect, though with WebGL we don't
|
||||
// have an easy way to generate one.
|
||||
nsRefPtr<gfxImageSurface> tmpSurface =
|
||||
new gfxImageSurface(destination,
|
||||
gfxIntSize(mBounds.width, mBounds.height),
|
||||
@ -145,10 +146,10 @@ CanvasLayerD3D9::Updated(const nsIntRect& aRect)
|
||||
mTexture->UnlockRect(0);
|
||||
} else if (mSurface) {
|
||||
RECT r;
|
||||
r.left = aRect.x;
|
||||
r.top = aRect.y;
|
||||
r.right = aRect.XMost();
|
||||
r.bottom = aRect.YMost();
|
||||
r.left = mBounds.x;
|
||||
r.top = mBounds.y;
|
||||
r.right = mBounds.XMost();
|
||||
r.bottom = mBounds.YMost();
|
||||
|
||||
D3DLOCKED_RECT lockedRect;
|
||||
HRESULT hr = mTexture->LockRect(0, &lockedRect, &r, 0);
|
||||
@ -158,16 +159,10 @@ CanvasLayerD3D9::Updated(const nsIntRect& aRect)
|
||||
return;
|
||||
}
|
||||
|
||||
PRUint8 *startBits;
|
||||
PRUint32 sourceStride;
|
||||
|
||||
nsRefPtr<gfxImageSurface> sourceSurface;
|
||||
|
||||
if (mSurface->GetType() == gfxASurface::SurfaceTypeWin32) {
|
||||
sourceSurface = mSurface->GetAsImageSurface();
|
||||
startBits = sourceSurface->Data() + sourceSurface->Stride() * aRect.y +
|
||||
aRect.x * 4;
|
||||
sourceStride = sourceSurface->Stride();
|
||||
} else if (mSurface->GetType() == gfxASurface::SurfaceTypeImage) {
|
||||
sourceSurface = static_cast<gfxImageSurface*>(mSurface.get());
|
||||
if (sourceSurface->Format() != gfxASurface::ImageFormatARGB32 &&
|
||||
@ -176,31 +171,28 @@ CanvasLayerD3D9::Updated(const nsIntRect& aRect)
|
||||
mTexture->UnlockRect(0);
|
||||
return;
|
||||
}
|
||||
startBits = sourceSurface->Data() + sourceSurface->Stride() * aRect.y +
|
||||
aRect.x * 4;
|
||||
sourceStride = sourceSurface->Stride();
|
||||
} else {
|
||||
sourceSurface = new gfxImageSurface(gfxIntSize(aRect.width, aRect.height),
|
||||
sourceSurface = new gfxImageSurface(gfxIntSize(mBounds.width, mBounds.height),
|
||||
gfxASurface::ImageFormatARGB32);
|
||||
nsRefPtr<gfxContext> ctx = new gfxContext(sourceSurface);
|
||||
ctx->Translate(gfxPoint(-aRect.x, -aRect.y));
|
||||
ctx->SetOperator(gfxContext::OPERATOR_SOURCE);
|
||||
ctx->SetSource(mSurface);
|
||||
ctx->Paint();
|
||||
startBits = sourceSurface->Data();
|
||||
sourceStride = sourceSurface->Stride();
|
||||
}
|
||||
|
||||
PRUint8 *startBits = sourceSurface->Data();
|
||||
PRUint32 sourceStride = sourceSurface->Stride();
|
||||
|
||||
if (sourceSurface->Format() != gfxASurface::ImageFormatARGB32) {
|
||||
mHasAlpha = false;
|
||||
} else {
|
||||
mHasAlpha = true;
|
||||
}
|
||||
|
||||
for (int y = 0; y < aRect.height; y++) {
|
||||
for (int y = 0; y < mBounds.height; y++) {
|
||||
memcpy((PRUint8*)lockedRect.pBits + lockedRect.Pitch * y,
|
||||
startBits + sourceStride * y,
|
||||
aRect.width * 4);
|
||||
mBounds.width * 4);
|
||||
}
|
||||
|
||||
mTexture->UnlockRect(0);
|
||||
@ -216,9 +208,11 @@ CanvasLayerD3D9::GetLayer()
|
||||
void
|
||||
CanvasLayerD3D9::RenderLayer()
|
||||
{
|
||||
if (!mTexture) {
|
||||
Updated(mBounds);
|
||||
}
|
||||
UpdateSurface();
|
||||
FireDidTransactionCallback();
|
||||
|
||||
if (!mTexture)
|
||||
return;
|
||||
|
||||
/*
|
||||
* We flip the Y axis here, note we can only do this because we are in
|
||||
|
@ -66,7 +66,6 @@ public:
|
||||
|
||||
// CanvasLayer implementation
|
||||
virtual void Initialize(const Data& aData);
|
||||
virtual void Updated(const nsIntRect& aRect);
|
||||
|
||||
// LayerD3D9 implementation
|
||||
virtual Layer* GetLayer();
|
||||
@ -79,6 +78,8 @@ public:
|
||||
protected:
|
||||
typedef mozilla::gl::GLContext GLContext;
|
||||
|
||||
void UpdateSurface();
|
||||
|
||||
nsRefPtr<gfxASurface> mSurface;
|
||||
nsRefPtr<GLContext> mGLContext;
|
||||
nsRefPtr<IDirect3DTexture9> mTexture;
|
||||
|
@ -172,7 +172,6 @@ struct OpPaintThebesBuffer {
|
||||
|
||||
struct OpPaintCanvas {
|
||||
PLayer layer;
|
||||
nsIntRect updated;
|
||||
Shmem newFrontBuffer;
|
||||
};
|
||||
|
||||
|
@ -301,7 +301,6 @@ ShadowLayerForwarder::PaintedCanvas(ShadowableLayer* aCanvas,
|
||||
gfxSharedImageSurface* aNewFrontSurface)
|
||||
{
|
||||
mTxn->AddPaint(OpPaintCanvas(NULL, Shadow(aCanvas),
|
||||
nsIntRect(),
|
||||
aNewFrontSurface->GetShmem()));
|
||||
}
|
||||
|
||||
|
@ -422,7 +422,7 @@ ShadowLayersParent::RecvUpdate(const InfallibleTArray<Edit>& cset,
|
||||
newFront.forget();
|
||||
}
|
||||
|
||||
canvas->Updated(op.updated());
|
||||
canvas->Updated();
|
||||
|
||||
replyv.push_back(OpBufferSwap(shadow, NULL,
|
||||
newBack->GetShmem()));
|
||||
|
@ -135,19 +135,18 @@ CanvasLayerOGL::MakeTexture()
|
||||
}
|
||||
|
||||
void
|
||||
CanvasLayerOGL::Updated(const nsIntRect& aRect)
|
||||
CanvasLayerOGL::UpdateSurface()
|
||||
{
|
||||
if (!mDirty)
|
||||
return;
|
||||
mDirty = PR_FALSE;
|
||||
|
||||
if (mDestroyed || mDelayedUpdates) {
|
||||
return;
|
||||
}
|
||||
|
||||
NS_ASSERTION(mUpdatedRect.IsEmpty(),
|
||||
"CanvasLayer::Updated called more than once during a transaction!");
|
||||
|
||||
mOGLManager->MakeCurrent();
|
||||
|
||||
mUpdatedRect.UnionRect(mUpdatedRect, aRect);
|
||||
|
||||
if (mCanvasGLContext &&
|
||||
mCanvasGLContext->GetContextType() == gl()->GetContextType())
|
||||
{
|
||||
@ -157,41 +156,36 @@ CanvasLayerOGL::Updated(const nsIntRect& aRect)
|
||||
MakeTexture();
|
||||
}
|
||||
} else {
|
||||
if (!mTexture) {
|
||||
mUpdatedRect = mBounds;
|
||||
}
|
||||
|
||||
nsRefPtr<gfxASurface> updatedAreaSurface;
|
||||
if (mCanvasSurface) {
|
||||
updatedAreaSurface = mCanvasSurface;
|
||||
} else if (mCanvasGLContext) {
|
||||
nsRefPtr<gfxImageSurface> updatedAreaImageSurface =
|
||||
new gfxImageSurface(gfxIntSize(mUpdatedRect.width, mUpdatedRect.height),
|
||||
new gfxImageSurface(gfxIntSize(mBounds.width, mBounds.height),
|
||||
gfxASurface::ImageFormatARGB32);
|
||||
mCanvasGLContext->ReadPixelsIntoImageSurface(mUpdatedRect.x, mUpdatedRect.y,
|
||||
mUpdatedRect.width,
|
||||
mUpdatedRect.height,
|
||||
mCanvasGLContext->ReadPixelsIntoImageSurface(0, 0,
|
||||
mBounds.width,
|
||||
mBounds.height,
|
||||
updatedAreaImageSurface);
|
||||
updatedAreaSurface = updatedAreaImageSurface;
|
||||
}
|
||||
|
||||
mLayerProgram =
|
||||
gl()->UploadSurfaceToTexture(updatedAreaSurface,
|
||||
mUpdatedRect,
|
||||
mBounds,
|
||||
mTexture,
|
||||
false,
|
||||
mUpdatedRect.TopLeft());
|
||||
nsIntPoint(0, 0));
|
||||
}
|
||||
|
||||
// sanity
|
||||
NS_ASSERTION(mBounds.Contains(mUpdatedRect),
|
||||
"CanvasLayer: Updated rect bigger than bounds!");
|
||||
}
|
||||
|
||||
void
|
||||
CanvasLayerOGL::RenderLayer(int aPreviousDestination,
|
||||
const nsIntPoint& aOffset)
|
||||
{
|
||||
UpdateSurface();
|
||||
FireDidTransactionCallback();
|
||||
|
||||
mOGLManager->MakeCurrent();
|
||||
|
||||
// XXX We're going to need a different program depending on if
|
||||
@ -248,8 +242,6 @@ CanvasLayerOGL::RenderLayer(int aPreviousDestination,
|
||||
if (useGLContext) {
|
||||
gl()->UnbindTex2DOffscreen(mCanvasGLContext);
|
||||
}
|
||||
|
||||
mUpdatedRect.Empty();
|
||||
}
|
||||
|
||||
|
||||
|
@ -66,7 +66,6 @@ public:
|
||||
|
||||
// CanvasLayer implementation
|
||||
virtual void Initialize(const Data& aData);
|
||||
virtual void Updated(const nsIntRect& aRect);
|
||||
|
||||
// LayerOGL implementation
|
||||
virtual void Destroy();
|
||||
@ -75,6 +74,8 @@ public:
|
||||
const nsIntPoint& aOffset);
|
||||
|
||||
protected:
|
||||
void UpdateSurface();
|
||||
|
||||
nsRefPtr<gfxASurface> mCanvasSurface;
|
||||
nsRefPtr<GLContext> mCanvasGLContext;
|
||||
gl::ShaderProgramType mLayerProgram;
|
||||
@ -82,8 +83,6 @@ protected:
|
||||
void MakeTexture();
|
||||
GLuint mTexture;
|
||||
|
||||
nsIntRect mUpdatedRect;
|
||||
|
||||
PRPackedBool mDelayedUpdates;
|
||||
PRPackedBool mGLBufferIsPremultiplied;
|
||||
PRPackedBool mNeedsYFlip;
|
||||
|
@ -205,10 +205,12 @@ nsRect& nsRect::ScaleRoundOut(float aXScale, float aYScale)
|
||||
return *this;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static bool IsFloatInteger(float aFloat)
|
||||
{
|
||||
return fabs(aFloat - NS_round(aFloat)) < 1e-6;
|
||||
}
|
||||
#endif
|
||||
|
||||
nsRect& nsRect::ExtendForScaling(float aXMult, float aYMult)
|
||||
{
|
||||
|
@ -120,6 +120,7 @@ GLXLibrary::EnsureInitialized()
|
||||
{ (PRFuncPtr*) &xGetCurrentContext, { "glXGetCurrentContext", NULL } },
|
||||
/* functions introduced in GLX 1.1 */
|
||||
{ (PRFuncPtr*) &xQueryExtensionsString, { "glXQueryExtensionsString", NULL } },
|
||||
{ (PRFuncPtr*) &xGetClientString, { "glXGetClientString", NULL } },
|
||||
{ (PRFuncPtr*) &xQueryServerString, { "glXQueryServerString", NULL } },
|
||||
{ NULL, { NULL } }
|
||||
};
|
||||
@ -171,14 +172,30 @@ GLXLibrary::EnsureInitialized()
|
||||
}
|
||||
|
||||
Display *display = DefaultXDisplay();
|
||||
PRBool ignoreBlacklist = PR_GetEnv("MOZ_GLX_IGNORE_BLACKLIST") != nsnull;
|
||||
if (!ignoreBlacklist) {
|
||||
// ATI's libGL (at least the one provided with 11.2 drivers) segfaults
|
||||
// when querying server info if the server does not have the
|
||||
// ATIFGLEXTENSION extension.
|
||||
const char *clientVendor = xGetClientString(display, GLX_VENDOR);
|
||||
if (clientVendor && strcmp(clientVendor, "ATI") == 0) {
|
||||
printf("[GLX] The ATI proprietary libGL.so.1 is currently "
|
||||
"blacklisted to avoid crashes that happen in some "
|
||||
"situations. If you would like to bypass this, set the "
|
||||
"MOZ_GLX_IGNORE_BLACKLIST environment variable.\n");
|
||||
return PR_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
int screen = DefaultScreen(display);
|
||||
const char *vendor;
|
||||
const char *serverVendor;
|
||||
const char *serverVersionStr;
|
||||
const char *extensionsStr;
|
||||
|
||||
// this scope is covered by a ScopedXErrorHandler to catch X errors in GLX calls,
|
||||
// see bug 632867 comment 3: Mesa versions up to 7.10 cause a BadLength error during the first GLX call
|
||||
// when the server GLX version < 1.3.
|
||||
// This scope is covered by a ScopedXErrorHandler to catch X errors in GLX
|
||||
// calls. See bug 632867 comment 3: Mesa versions up to 7.10 cause a
|
||||
// BadLength error during the first GLX call that communicates with the
|
||||
// server when the server GLX version < 1.3.
|
||||
{
|
||||
ScopedXErrorHandler xErrorHandler;
|
||||
|
||||
@ -188,15 +205,14 @@ GLXLibrary::EnsureInitialized()
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
vendor = xQueryServerString(display, screen, GLX_VENDOR);
|
||||
serverVendor = xQueryServerString(display, screen, GLX_VENDOR);
|
||||
serverVersionStr = xQueryServerString(display, screen, GLX_VERSION);
|
||||
|
||||
PRBool IsDriverBlacklisted = !vendor || // it's been reported that a VNC X server was returning vendor=null
|
||||
PRBool IsDriverBlacklisted = !serverVendor || // it's been reported that a VNC X server was returning serverVendor=null
|
||||
!serverVersionStr ||
|
||||
strcmp(vendor, "NVIDIA Corporation");
|
||||
strcmp(serverVendor, "NVIDIA Corporation");
|
||||
|
||||
if (IsDriverBlacklisted &&
|
||||
!PR_GetEnv("MOZ_GLX_IGNORE_BLACKLIST"))
|
||||
if (IsDriverBlacklisted && !ignoreBlacklist)
|
||||
{
|
||||
printf("[GLX] your GL driver is currently blocked. If you would like to bypass this, "
|
||||
"define the MOZ_GLX_IGNORE_BLACKLIST environment variable.\n");
|
||||
@ -245,9 +261,11 @@ GLXLibrary::EnsureInitialized()
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
gIsATI = vendor && DoesVendorStringMatch(vendor, "ATI");
|
||||
gIsChromium = (vendor && DoesVendorStringMatch(vendor, "Chromium")) ||
|
||||
(serverVersionStr && DoesVendorStringMatch(serverVersionStr, "Chromium"));
|
||||
gIsATI = serverVendor && DoesVendorStringMatch(serverVendor, "ATI");
|
||||
gIsChromium = (serverVendor &&
|
||||
DoesVendorStringMatch(serverVendor, "Chromium")) ||
|
||||
(serverVersionStr &&
|
||||
DoesVendorStringMatch(serverVersionStr, "Chromium"));
|
||||
|
||||
mInitialized = PR_TRUE;
|
||||
return PR_TRUE;
|
||||
|
@ -89,6 +89,9 @@ public:
|
||||
typedef const char * (GLAPIENTRY * PFNGLXQUERYEXTENSIONSSTRING) (Display *,
|
||||
int);
|
||||
PFNGLXQUERYEXTENSIONSSTRING xQueryExtensionsString;
|
||||
typedef const char * (GLAPIENTRY * PFNGLXGETCLIENTSTRING) (Display *,
|
||||
int);
|
||||
PFNGLXGETCLIENTSTRING xGetClientString;
|
||||
typedef const char * (GLAPIENTRY * PFNGLXQUERYSERVERSTRING) (Display *,
|
||||
int,
|
||||
int);
|
||||
|
@ -367,7 +367,7 @@ CreateTempXlibSurface (gfxASurface *destination, nsIntSize size,
|
||||
target_visual = gfxXlibSurface::FindVisual(screen, imageFormat);
|
||||
Display *dpy = DisplayOfScreen(screen);
|
||||
if (target_visual) {
|
||||
target_format = XRenderFindVisualFormat(dpy, visual);
|
||||
target_format = XRenderFindVisualFormat(dpy, target_visual);
|
||||
} else {
|
||||
target_format =
|
||||
gfxXlibSurface::FindRenderFormat(dpy, imageFormat);
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0020
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0020
|
||||
End of Item 0000
|
||||
|
||||
@ -231,7 +231,7 @@ End of Item 0013
|
||||
0x1210, 0x1122, 0x2122, 0x2212, 0x1221, 0x0000,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x000A Start of MapCell Array */
|
||||
/* 0000 */ 0x0020, 0x007E, 0x0020,
|
||||
/* 0000 */ 0x0020, 0x007F, 0x0020,
|
||||
/* 0001 */ 0x00A0, 0x00FF, 0x0000,
|
||||
/* 0002 */ 0x0131, 0x0000, 0x00F5,
|
||||
/* 0003 */ 0x0152, 0x0153, 0x0060,
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0020
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0020
|
||||
End of Item 0000
|
||||
|
||||
@ -97,7 +97,7 @@ End of Item 0001
|
||||
0x0010,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0005 Start of MapCell Array */
|
||||
/* 0000 */ 0x0020, 0x007E, 0x0020,
|
||||
/* 0000 */ 0x0020, 0x007F, 0x0020,
|
||||
/* 0001 */ 0x0080, 0x00FF, 0x0000,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x000B Start of MappingTable */
|
||||
|
@ -46,7 +46,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0000
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0000
|
||||
End of Item 0000
|
||||
|
||||
@ -215,7 +215,7 @@ End of Item 0010
|
||||
0x0000, 0x2210, 0x1211, 0x1111, 0x0002,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0009 Start of MapCell Array */
|
||||
/* 0000 */ 0x0000, 0x007E, 0x0000,
|
||||
/* 0000 */ 0x0000, 0x007F, 0x0000,
|
||||
/* 0001 */ 0x0418, 0x041F, 0x00E9,
|
||||
/* 0002 */ 0x0438, 0x043F, 0x00C9,
|
||||
/* 0003 */ 0x2553, 0x2561, 0x00A4,
|
||||
|
@ -46,7 +46,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0000
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0000
|
||||
End of Item 0000
|
||||
|
||||
@ -136,7 +136,7 @@ End of Item 0007
|
||||
0x0000, 0x1210, 0x0000,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0007 Start of MapCell Array */
|
||||
/* 0000 */ 0x0000, 0x007E, 0x0000,
|
||||
/* 0000 */ 0x0000, 0x007F, 0x0000,
|
||||
/* 0001 */ 0x00A4, 0x00B2, 0x2553,
|
||||
/* 0002 */ 0x00B4, 0x00BE, 0x2562,
|
||||
/* 0003 */ 0x00C9, 0x00D0, 0x0438,
|
||||
|
@ -46,7 +46,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0000
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0000
|
||||
End of Item 0000
|
||||
|
||||
@ -209,7 +209,7 @@ End of Item 000E
|
||||
0x1000, 0x1112, 0x1112, 0x0211,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0008 Start of MapCell Array */
|
||||
/* 0000 */ 0x0000, 0x007E, 0x0000,
|
||||
/* 0000 */ 0x0000, 0x007F, 0x0000,
|
||||
/* 0001 */ 0x0418, 0x041F, 0x00E9,
|
||||
/* 0002 */ 0x0438, 0x043F, 0x00C9,
|
||||
/* 0003 */ 0x00A0, 0x00B7, 0x0000,
|
||||
|
@ -46,7 +46,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0000
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0000
|
||||
End of Item 0000
|
||||
|
||||
@ -110,7 +110,7 @@ End of Item 0003
|
||||
0x1000, 0x0000,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0006 Start of MapCell Array */
|
||||
/* 0000 */ 0x0000, 0x007E, 0x0000,
|
||||
/* 0000 */ 0x0000, 0x007F, 0x0000,
|
||||
/* 0001 */ 0x00C9, 0x00D0, 0x0438,
|
||||
/* 0002 */ 0x00E9, 0x00F0, 0x0418,
|
||||
/* 0003 */ 0x0080, 0x00FF, 0x0000,
|
||||
|
@ -46,7 +46,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0000
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0000
|
||||
End of Item 0000
|
||||
|
||||
@ -167,7 +167,7 @@ End of Item 0008
|
||||
0x1210, 0x1121, 0x0002,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0007 Start of MapCell Array */
|
||||
/* 0000 */ 0x0000, 0x007E, 0x0000,
|
||||
/* 0000 */ 0x0000, 0x007F, 0x0000,
|
||||
/* 0001 */ 0x00A0, 0x017E, 0x0000,
|
||||
/* 0002 */ 0x02C7, 0x0000, 0x00FF,
|
||||
/* 0003 */ 0x2013, 0x2026, 0x00DF,
|
||||
|
@ -46,7 +46,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0000
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0000
|
||||
End of Item 0000
|
||||
|
||||
@ -96,7 +96,7 @@ End of Item 0001
|
||||
0x0010,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0005 Start of MapCell Array */
|
||||
/* 0000 */ 0x0000, 0x007E, 0x0000,
|
||||
/* 0000 */ 0x0000, 0x007F, 0x0000,
|
||||
/* 0001 */ 0x0080, 0x00FF, 0x0000,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x000B Start of MappingTable */
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0020
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0020
|
||||
End of Item 0000
|
||||
|
||||
@ -237,7 +237,7 @@ End of Item 0013
|
||||
0x1210, 0x1211, 0x1221, 0x2122, 0x2212, 0x0000,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x000A Start of MapCell Array */
|
||||
/* 0000 */ 0x0020, 0x007E, 0x0020,
|
||||
/* 0000 */ 0x0020, 0x007F, 0x0020,
|
||||
/* 0001 */ 0x00A0, 0x0111, 0x0000,
|
||||
/* 0002 */ 0x0131, 0x0000, 0x00F5,
|
||||
/* 0003 */ 0x0152, 0x0153, 0x0072,
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0020
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0020
|
||||
End of Item 0000
|
||||
|
||||
@ -97,7 +97,7 @@ End of Item 0001
|
||||
0x0010,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0005 Start of MapCell Array */
|
||||
/* 0000 */ 0x0020, 0x007E, 0x0020,
|
||||
/* 0000 */ 0x0020, 0x007F, 0x0020,
|
||||
/* 0001 */ 0x0080, 0x00FF, 0x0000,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x000B Start of MappingTable */
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0020
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0020
|
||||
End of Item 0000
|
||||
|
||||
@ -200,7 +200,7 @@ End of Item 0010
|
||||
0x1000, 0x1122, 0x2211, 0x2122, 0x0001,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0009 Start of MapCell Array */
|
||||
/* 0000 */ 0x0020, 0x007E, 0x0020,
|
||||
/* 0000 */ 0x0020, 0x007F, 0x0020,
|
||||
/* 0001 */ 0x0410, 0x042F, 0x0080,
|
||||
/* 0002 */ 0x0430, 0x044E, 0x00E0,
|
||||
/* 0003 */ 0x00A0, 0x00BB, 0x0000,
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0020
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0020
|
||||
End of Item 0000
|
||||
|
||||
@ -109,7 +109,7 @@ End of Item 0004
|
||||
0x1000, 0x0002,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0006 Start of MapCell Array */
|
||||
/* 0000 */ 0x0020, 0x007E, 0x0020,
|
||||
/* 0000 */ 0x0020, 0x007F, 0x0020,
|
||||
/* 0001 */ 0x0080, 0x009F, 0x0410,
|
||||
/* 0002 */ 0x00E0, 0x00FE, 0x0430,
|
||||
/* 0003 */ 0x00A0, 0x00DF, 0x0000,
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0000
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0000
|
||||
End of Item 0000
|
||||
|
||||
@ -180,7 +180,7 @@ End of Item 000D
|
||||
0x0000, 0x2100, 0x1111, 0x0022,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0008 Start of MapCell Array */
|
||||
/* 0000 */ 0x0000, 0x007E, 0x0000,
|
||||
/* 0000 */ 0x0000, 0x007F, 0x0000,
|
||||
/* 0001 */ 0x0905, 0x090B, 0x00A4,
|
||||
/* 0002 */ 0x0915, 0x092F, 0x00B3,
|
||||
/* 0003 */ 0x0930, 0x0939, 0x00CF,
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0000
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0000
|
||||
End of Item 0000
|
||||
|
||||
@ -142,7 +142,7 @@ End of Item 0008
|
||||
0x0000, 0x1100, 0x0001,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0007 Start of MapCell Array */
|
||||
/* 0000 */ 0x0000, 0x007E, 0x0000,
|
||||
/* 0000 */ 0x0000, 0x007F, 0x0000,
|
||||
/* 0001 */ 0x00A4, 0x00AA, 0x0905,
|
||||
/* 0002 */ 0x00B3, 0x00CD, 0x0915,
|
||||
/* 0003 */ 0x00CF, 0x00D8, 0x0930,
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0020
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0020
|
||||
End of Item 0000
|
||||
|
||||
@ -163,7 +163,7 @@ End of Item 0009
|
||||
0x2110, 0x2211, 0x0012,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0007 Start of MapCell Array */
|
||||
/* 0000 */ 0x0020, 0x007E, 0x0020,
|
||||
/* 0000 */ 0x0020, 0x007F, 0x0020,
|
||||
/* 0001 */ 0x00A0, 0x00C9, 0x0000,
|
||||
/* 0002 */ 0x00D6, 0x00FC, 0x002A,
|
||||
/* 0003 */ 0x0153, 0x0000, 0x00CF,
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0020
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0020
|
||||
End of Item 0000
|
||||
|
||||
@ -97,7 +97,7 @@ End of Item 0001
|
||||
0x0010,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0005 Start of MapCell Array */
|
||||
/* 0000 */ 0x0020, 0x007E, 0x0020,
|
||||
/* 0000 */ 0x0020, 0x007F, 0x0020,
|
||||
/* 0001 */ 0x0080, 0x00FF, 0x0000,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x000B Start of MappingTable */
|
||||
|
@ -47,7 +47,7 @@
|
||||
Begin of Item 0000
|
||||
Format 0
|
||||
srcBegin = 0000
|
||||
srcEnd = 007E
|
||||
srcEnd = 007F
|
||||
destBegin = 0000
|
||||
End of Item 0000
|
||||
|
||||
@ -179,7 +179,7 @@ End of Item 000D
|
||||
0x0000, 0x2100, 0x1111, 0x0022,
|
||||
/*-------------------------------------------------------*/
|
||||
/* Offset=0x0008 Start of MapCell Array */
|
||||
/* 0000 */ 0x0000, 0x007E, 0x0000,
|
||||
/* 0000 */ 0x0000, 0x007F, 0x0000,
|
||||
/* 0001 */ 0x0A85, 0x0A8B, 0x00A4,
|
||||
/* 0002 */ 0x0A95, 0x0AA8, 0x00B3,
|
||||
/* 0003 */ 0x0AAA, 0x0AAF, 0x00C8,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user