mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-23 23:57:31 +09:00
Merge remote-tracking branch 'origin/master' into custom
This commit is contained in:
commit
46f3d1d2a3
15 changed files with 144 additions and 52 deletions
|
|
@ -1109,6 +1109,12 @@ class CGHeaders(CGWrapper):
|
||||||
# Now find all the things we'll need as arguments because we
|
# Now find all the things we'll need as arguments because we
|
||||||
# need to wrap or unwrap them.
|
# need to wrap or unwrap them.
|
||||||
bindingHeaders = set()
|
bindingHeaders = set()
|
||||||
|
|
||||||
|
# KeyframeAnimationOptions.webidl is doing something VERY screwy and
|
||||||
|
# Unified Building really sucks so directly include this
|
||||||
|
if prefix == "KeyframeAnimationOptionsBinding":
|
||||||
|
bindingHeaders.add("mozilla/dom/PrimitiveConversions.h")
|
||||||
|
|
||||||
declareIncludes = set(declareIncludes)
|
declareIncludes = set(declareIncludes)
|
||||||
|
|
||||||
def addHeadersForType((t, dictionary)):
|
def addHeadersForType((t, dictionary)):
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,12 @@
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
#include "jswrapper.h"
|
||||||
#include "WebIDLGlobalNameHash.h"
|
#include "WebIDLGlobalNameHash.h"
|
||||||
#include "js/GCAPI.h"
|
#include "js/GCAPI.h"
|
||||||
|
#include "XrayWrapper.h"
|
||||||
|
#include "XPCWrapper.h"
|
||||||
|
#include "mozilla/dom/Selection.h"
|
||||||
#include "mozilla/HashFunctions.h"
|
#include "mozilla/HashFunctions.h"
|
||||||
#include "mozilla/Maybe.h"
|
#include "mozilla/Maybe.h"
|
||||||
#include "mozilla/dom/DOMJSProxyHandler.h"
|
#include "mozilla/dom/DOMJSProxyHandler.h"
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
#define mozilla_dom_WebIDLGlobalNameHash_h__
|
#define mozilla_dom_WebIDLGlobalNameHash_h__
|
||||||
|
|
||||||
#include "js/RootingAPI.h"
|
#include "js/RootingAPI.h"
|
||||||
|
#include "nsString.h"
|
||||||
#include "nsTArray.h"
|
#include "nsTArray.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ LOCAL_INCLUDES += [
|
||||||
'/media/webrtc/signaling/src/peerconnection',
|
'/media/webrtc/signaling/src/peerconnection',
|
||||||
]
|
]
|
||||||
|
|
||||||
UNIFIED_SOURCES += [
|
SOURCES += [
|
||||||
'BindingUtils.cpp',
|
'BindingUtils.cpp',
|
||||||
'CallbackInterface.cpp',
|
'CallbackInterface.cpp',
|
||||||
'CallbackObject.cpp',
|
'CallbackObject.cpp',
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,13 @@
|
||||||
#include "jsapi.h"
|
#include "jsapi.h"
|
||||||
#include "js/RootingAPI.h"
|
#include "js/RootingAPI.h"
|
||||||
|
|
||||||
|
#include "jswrapper.h"
|
||||||
|
#include "nsCOMArray.h"
|
||||||
|
#include "nsContentUtils.h"
|
||||||
|
#include "nsCycleCollectionParticipant.h"
|
||||||
#include "nsIScriptError.h"
|
#include "nsIScriptError.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
|
#include "nsStringFwd.h"
|
||||||
|
|
||||||
class nsScriptErrorNote final : public nsIScriptErrorNote {
|
class nsScriptErrorNote final : public nsIScriptErrorNote {
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ using namespace mozilla::dom;
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
static nsCString
|
static nsCString
|
||||||
FormatStackString(JSContext* cx, HandleObject aStack) {
|
FormatStackString(JSContext* cx, JS::HandleObject aStack) {
|
||||||
JS::RootedString formattedStack(cx);
|
JS::RootedString formattedStack(cx);
|
||||||
|
|
||||||
if (!JS::BuildStackString(cx, aStack, &formattedStack)) {
|
if (!JS::BuildStackString(cx, aStack, &formattedStack)) {
|
||||||
|
|
@ -111,7 +111,7 @@ nsScriptErrorWithStack::ToString(nsACString& /*UTF8*/ aResult)
|
||||||
}
|
}
|
||||||
|
|
||||||
JSContext* cx = jsapi.cx();
|
JSContext* cx = jsapi.cx();
|
||||||
RootedObject stack(cx, mStack);
|
JS::RootedObject stack(cx, mStack);
|
||||||
nsCString stackString = FormatStackString(cx, stack);
|
nsCString stackString = FormatStackString(cx, stack);
|
||||||
nsCString combined = message + NS_LITERAL_CSTRING("\n") + stackString;
|
nsCString combined = message + NS_LITERAL_CSTRING("\n") + stackString;
|
||||||
aResult.Assign(combined);
|
aResult.Assign(combined);
|
||||||
|
|
|
||||||
|
|
@ -555,7 +555,21 @@ permitsPort(const nsAString& aEnforcementScheme,
|
||||||
|
|
||||||
int32_t resourcePort;
|
int32_t resourcePort;
|
||||||
nsresult rv = aResourceURI->GetPort(&resourcePort);
|
nsresult rv = aResourceURI->GetPort(&resourcePort);
|
||||||
NS_ENSURE_SUCCESS(rv, false);
|
if (NS_FAILED(rv) && aEnforcementPort.IsEmpty()) {
|
||||||
|
// If we cannot get a Port (e.g. because of an Custom Protocol handler)
|
||||||
|
// we need to check if a default port is associated with the Scheme
|
||||||
|
if (aEnforcementScheme.IsEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int defaultPortforScheme =
|
||||||
|
NS_GetDefaultPort(NS_ConvertUTF16toUTF8(aEnforcementScheme).get());
|
||||||
|
|
||||||
|
// If there is no default port associated with the Scheme (
|
||||||
|
// defaultPortforScheme == -1) or it is an externally handled protocol (
|
||||||
|
// defaultPortforScheme == 0 ) and the csp does not enforce a port - we can
|
||||||
|
// allow not having a port
|
||||||
|
return (defaultPortforScheme == -1 || defaultPortforScheme == 0);
|
||||||
|
}
|
||||||
|
|
||||||
// Avoid unnecessary string creation/manipulation and don't block the
|
// Avoid unnecessary string creation/manipulation and don't block the
|
||||||
// load if the resource to be loaded uses the default port for that
|
// load if the resource to be loaded uses the default port for that
|
||||||
|
|
|
||||||
|
|
@ -1056,6 +1056,7 @@ protected:
|
||||||
bool ParseOneFamily(nsAString& aFamily, bool& aOneKeyword, bool& aQuoted);
|
bool ParseOneFamily(nsAString& aFamily, bool& aOneKeyword, bool& aQuoted);
|
||||||
bool ParseFamily(nsCSSValue& aValue);
|
bool ParseFamily(nsCSSValue& aValue);
|
||||||
bool ParseFontFeatureSettings(nsCSSValue& aValue);
|
bool ParseFontFeatureSettings(nsCSSValue& aValue);
|
||||||
|
bool ParseFontVariationSettings(nsCSSValue& aValue);
|
||||||
bool ParseFontSrc(nsCSSValue& aValue);
|
bool ParseFontSrc(nsCSSValue& aValue);
|
||||||
bool ParseFontSrcFormat(InfallibleTArray<nsCSSValue>& values);
|
bool ParseFontSrcFormat(InfallibleTArray<nsCSSValue>& values);
|
||||||
bool ParseFontRanges(nsCSSValue& aValue);
|
bool ParseFontRanges(nsCSSValue& aValue);
|
||||||
|
|
@ -12092,6 +12093,8 @@ CSSParserImpl::ParseSingleValuePropertyByFunction(nsCSSValue& aValue,
|
||||||
return ParseFontVariantNumeric(aValue);
|
return ParseFontVariantNumeric(aValue);
|
||||||
case eCSSProperty_font_feature_settings:
|
case eCSSProperty_font_feature_settings:
|
||||||
return ParseFontFeatureSettings(aValue);
|
return ParseFontFeatureSettings(aValue);
|
||||||
|
case eCSSProperty_font_variation_settings:
|
||||||
|
return ParseFontVariationSettings(aValue);
|
||||||
case eCSSProperty_font_weight:
|
case eCSSProperty_font_weight:
|
||||||
return ParseFontWeight(aValue);
|
return ParseFontWeight(aValue);
|
||||||
case eCSSProperty_image_orientation:
|
case eCSSProperty_image_orientation:
|
||||||
|
|
@ -15315,6 +15318,19 @@ CSSParserImpl::ParseFontFeatureSettings(nsCSSValue& aValue)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CSSParserImpl::ParseFontVariationSettings(nsCSSValue& aValue)
|
||||||
|
{
|
||||||
|
// TODO: Actually implement this.
|
||||||
|
|
||||||
|
// This stub is here because websites insist on considering this
|
||||||
|
// very hardware-dependent and O.S.-variable low-level font-control
|
||||||
|
// as a "critical feature" which it isn't as there is 0 guarantee
|
||||||
|
// that font variation settings are supported or honored by any
|
||||||
|
// operating system used by the client.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
CSSParserImpl::ParseListStyle()
|
CSSParserImpl::ParseListStyle()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2036,6 +2036,20 @@ CSS_PROP_FONT(
|
||||||
kFontVariantPositionKTable,
|
kFontVariantPositionKTable,
|
||||||
CSS_PROP_NO_OFFSET,
|
CSS_PROP_NO_OFFSET,
|
||||||
eStyleAnimType_Discrete)
|
eStyleAnimType_Discrete)
|
||||||
|
CSS_PROP_FONT(
|
||||||
|
font-variation-settings,
|
||||||
|
font_variation_settings,
|
||||||
|
FontVariationSettings,
|
||||||
|
CSS_PROPERTY_PARSE_VALUE |
|
||||||
|
CSS_PROPERTY_VALUE_PARSER_FUNCTION |
|
||||||
|
CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
|
||||||
|
CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
|
||||||
|
CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
|
||||||
|
"layout.css.font-variations.stub",
|
||||||
|
0,
|
||||||
|
nullptr,
|
||||||
|
CSS_PROP_NO_OFFSET,
|
||||||
|
eStyleAnimType_Discrete)
|
||||||
CSS_PROP_FONT(
|
CSS_PROP_FONT(
|
||||||
font-weight,
|
font-weight,
|
||||||
font_weight,
|
font_weight,
|
||||||
|
|
|
||||||
|
|
@ -674,9 +674,9 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
|
||||||
mPresShell->GetPresContext()->GetRestyleGeneration();
|
mPresShell->GetPresContext()->GetRestyleGeneration();
|
||||||
|
|
||||||
if (mStyleContext) {
|
if (mStyleContext) {
|
||||||
// We can't rely on the undisplayed restyle generation if mElement is
|
// We can't rely on the undisplayed restyle generation if mElement is
|
||||||
// out-of-document, since that generation is not incremented for DOM changes
|
// out-of-document, since that generation is not incremented for DOM changes
|
||||||
// on out-of-document elements.
|
// on out-of-document elements.
|
||||||
if (mStyleContextGeneration == currentGeneration &&
|
if (mStyleContextGeneration == currentGeneration &&
|
||||||
mElement->IsInComposedDoc()) {
|
mElement->IsInComposedDoc()) {
|
||||||
// Our cached style context is still valid.
|
// Our cached style context is still valid.
|
||||||
|
|
@ -1619,6 +1619,16 @@ nsComputedDOMStyle::DoGetFontFeatureSettings()
|
||||||
return val.forget();
|
return val.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
already_AddRefed<CSSValue>
|
||||||
|
nsComputedDOMStyle::DoGetFontVariationSettings()
|
||||||
|
{
|
||||||
|
// TODO: This is still a stub, always returning "normal"
|
||||||
|
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
|
||||||
|
|
||||||
|
val->SetIdent(eCSSKeyword_normal);
|
||||||
|
return val.forget();
|
||||||
|
}
|
||||||
|
|
||||||
already_AddRefed<CSSValue>
|
already_AddRefed<CSSValue>
|
||||||
nsComputedDOMStyle::DoGetFontKerning()
|
nsComputedDOMStyle::DoGetFontKerning()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -251,6 +251,7 @@ private:
|
||||||
already_AddRefed<CSSValue> DoGetColor();
|
already_AddRefed<CSSValue> DoGetColor();
|
||||||
already_AddRefed<CSSValue> DoGetFontFamily();
|
already_AddRefed<CSSValue> DoGetFontFamily();
|
||||||
already_AddRefed<CSSValue> DoGetFontFeatureSettings();
|
already_AddRefed<CSSValue> DoGetFontFeatureSettings();
|
||||||
|
already_AddRefed<CSSValue> DoGetFontVariationSettings();
|
||||||
already_AddRefed<CSSValue> DoGetFontKerning();
|
already_AddRefed<CSSValue> DoGetFontKerning();
|
||||||
already_AddRefed<CSSValue> DoGetFontLanguageOverride();
|
already_AddRefed<CSSValue> DoGetFontLanguageOverride();
|
||||||
already_AddRefed<CSSValue> DoGetFontSize();
|
already_AddRefed<CSSValue> DoGetFontSize();
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,7 @@ COMPUTED_STYLE_PROP(font_variant_east_asian, FontVariantEastAsian)
|
||||||
COMPUTED_STYLE_PROP(font_variant_ligatures, FontVariantLigatures)
|
COMPUTED_STYLE_PROP(font_variant_ligatures, FontVariantLigatures)
|
||||||
COMPUTED_STYLE_PROP(font_variant_numeric, FontVariantNumeric)
|
COMPUTED_STYLE_PROP(font_variant_numeric, FontVariantNumeric)
|
||||||
COMPUTED_STYLE_PROP(font_variant_position, FontVariantPosition)
|
COMPUTED_STYLE_PROP(font_variant_position, FontVariantPosition)
|
||||||
|
COMPUTED_STYLE_PROP(font_variation_settings, FontVariationSettings)
|
||||||
COMPUTED_STYLE_PROP(font_weight, FontWeight)
|
COMPUTED_STYLE_PROP(font_weight, FontWeight)
|
||||||
COMPUTED_STYLE_PROP(grid_auto_columns, GridAutoColumns)
|
COMPUTED_STYLE_PROP(grid_auto_columns, GridAutoColumns)
|
||||||
COMPUTED_STYLE_PROP(grid_auto_flow, GridAutoFlow)
|
COMPUTED_STYLE_PROP(grid_auto_flow, GridAutoFlow)
|
||||||
|
|
|
||||||
|
|
@ -1237,19 +1237,29 @@ PaintRowGroupBackgroundByColIdx(nsTableRowGroupFrame* aRowGroup,
|
||||||
const nsTArray<int32_t>& aColIdx,
|
const nsTArray<int32_t>& aColIdx,
|
||||||
const nsPoint& aOffset)
|
const nsPoint& aOffset)
|
||||||
{
|
{
|
||||||
|
MOZ_DIAGNOSTIC_ASSERT(!aColIdx.IsEmpty(),
|
||||||
|
"Must be painting backgrounds for something");
|
||||||
for (nsTableRowFrame* row = aRowGroup->GetFirstRow(); row; row = row->GetNextRow()) {
|
for (nsTableRowFrame* row = aRowGroup->GetFirstRow(); row; row = row->GetNextRow()) {
|
||||||
auto rowPos = row->GetNormalPosition() + aOffset;
|
auto rowPos = row->GetNormalPosition() + aOffset;
|
||||||
if (!aDirtyRect.Intersects(nsRect(rowPos, row->GetSize()))) {
|
if (!aDirtyRect.Intersects(nsRect(rowPos, row->GetSize()))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (nsTableCellFrame* cell = row->GetFirstCell(); cell; cell = cell->GetNextCell()) {
|
for (nsTableCellFrame* cell = row->GetFirstCell(); cell; cell = cell->GetNextCell()) {
|
||||||
|
|
||||||
|
int32_t curColIdx;
|
||||||
|
cell->GetColIndex(curColIdx);
|
||||||
|
if (!aColIdx.Contains(curColIdx)) {
|
||||||
|
if (curColIdx > aColIdx.LastElement()) {
|
||||||
|
// We can just stop looking at this row.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!cell->ShouldPaintBackground(aBuilder)) {
|
if (!cell->ShouldPaintBackground(aBuilder)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t curColIdx;
|
|
||||||
cell->GetColIndex(curColIdx);
|
|
||||||
if (aColIdx.Contains(curColIdx)) {
|
|
||||||
auto cellPos = cell->GetNormalPosition() + rowPos;
|
auto cellPos = cell->GetNormalPosition() + rowPos;
|
||||||
auto cellRect = nsRect(cellPos, cell->GetSize());
|
auto cellRect = nsRect(cellPos, cell->GetSize());
|
||||||
if (!aDirtyRect.Intersects(cellRect)) {
|
if (!aDirtyRect.Intersects(cellRect)) {
|
||||||
|
|
@ -1260,7 +1270,6 @@ PaintRowGroupBackgroundByColIdx(nsTableRowGroupFrame* aRowGroup,
|
||||||
true, nullptr,
|
true, nullptr,
|
||||||
aFrame->GetRectRelativeToSelf(),
|
aFrame->GetRectRelativeToSelf(),
|
||||||
cell);
|
cell);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1311,18 +1320,23 @@ nsTableFrame::DisplayGenericTablePart(nsDisplayListBuilder* aBuilder,
|
||||||
// Collecting column index.
|
// Collecting column index.
|
||||||
AutoTArray<int32_t, 1> colIdx;
|
AutoTArray<int32_t, 1> colIdx;
|
||||||
for (nsTableColFrame* col = colGroup->GetFirstColumn(); col; col = col->GetNextCol()) {
|
for (nsTableColFrame* col = colGroup->GetFirstColumn(); col; col = col->GetNextCol()) {
|
||||||
|
MOZ_ASSERT(colIdx.IsEmpty() ||
|
||||||
|
col->GetColIndex() > colIdx.LastElement());
|
||||||
colIdx.AppendElement(col->GetColIndex());
|
colIdx.AppendElement(col->GetColIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
nsTableFrame* table = colGroup->GetTableFrame();
|
if (!colIdx.IsEmpty()) {
|
||||||
RowGroupArray rowGroups;
|
// We have some actual cells that live inside this rowgroup.
|
||||||
table->OrderRowGroups(rowGroups);
|
nsTableFrame* table = colGroup->GetTableFrame();
|
||||||
for (nsTableRowGroupFrame* rowGroup : rowGroups) {
|
RowGroupArray rowGroups;
|
||||||
auto offset = rowGroup->GetNormalPosition() - colGroup->GetNormalPosition();
|
table->OrderRowGroups(rowGroups);
|
||||||
if (!aDirtyRect.Intersects(nsRect(offset, rowGroup->GetSize()))) {
|
for (nsTableRowGroupFrame* rowGroup : rowGroups) {
|
||||||
continue;
|
auto offset = rowGroup->GetNormalPosition() - colGroup->GetNormalPosition();
|
||||||
}
|
if (!aDirtyRect.Intersects(nsRect(offset, rowGroup->GetSize()))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
PaintRowGroupBackgroundByColIdx(rowGroup, aFrame, aBuilder, aLists, aDirtyRect, colIdx, offset);
|
PaintRowGroupBackgroundByColIdx(rowGroup, aFrame, aBuilder, aLists, aDirtyRect, colIdx, offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (aFrame->GetType() == nsGkAtoms::tableColFrame) {
|
} else if (aFrame->GetType() == nsGkAtoms::tableColFrame) {
|
||||||
// Compute background rect by iterating all cell frame.
|
// Compute background rect by iterating all cell frame.
|
||||||
|
|
|
||||||
|
|
@ -2528,6 +2528,9 @@ pref("layout.css.image-orientation.enabled", true);
|
||||||
// Is support for the font-display @font-face descriptor enabled?
|
// Is support for the font-display @font-face descriptor enabled?
|
||||||
pref("layout.css.font-display.enabled", false);
|
pref("layout.css.font-display.enabled", false);
|
||||||
|
|
||||||
|
// Enable the font variation stub code?
|
||||||
|
pref("layout.css.font-variations.stub", true);
|
||||||
|
|
||||||
// Are sets of prefixed properties supported?
|
// Are sets of prefixed properties supported?
|
||||||
pref("layout.css.prefixes.border-image", true);
|
pref("layout.css.prefixes.border-image", true);
|
||||||
pref("layout.css.prefixes.transforms", true);
|
pref("layout.css.prefixes.transforms", true);
|
||||||
|
|
|
||||||
|
|
@ -638,6 +638,7 @@ nsUnknownContentTypeDialog.prototype = {
|
||||||
|
|
||||||
// Returns true if opening the default application makes sense.
|
// Returns true if opening the default application makes sense.
|
||||||
openWithDefaultOK: function() {
|
openWithDefaultOK: function() {
|
||||||
|
// The checking is different on Windows...
|
||||||
#ifdef XP_WIN
|
#ifdef XP_WIN
|
||||||
// Windows presents some special cases.
|
// Windows presents some special cases.
|
||||||
// We need to prevent use of "system default" when the file is
|
// We need to prevent use of "system default" when the file is
|
||||||
|
|
@ -675,7 +676,7 @@ nsUnknownContentTypeDialog.prototype = {
|
||||||
// getPath:
|
// getPath:
|
||||||
getPath: function (aFile) {
|
getPath: function (aFile) {
|
||||||
#ifdef XP_MACOSX
|
#ifdef XP_MACOSX
|
||||||
return aFile.leafName || aFile.path;
|
return aFile.leafName || aFile.path;
|
||||||
#else
|
#else
|
||||||
return aFile.path;
|
return aFile.path;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1007,11 +1008,13 @@ nsUnknownContentTypeDialog.prototype = {
|
||||||
var otherHandler = this.dialogElement("otherHandler");
|
var otherHandler = this.dialogElement("otherHandler");
|
||||||
otherHandler.removeAttribute("hidden");
|
otherHandler.removeAttribute("hidden");
|
||||||
otherHandler.setAttribute("path", this.getPath(this.chosenApp.executable));
|
otherHandler.setAttribute("path", this.getPath(this.chosenApp.executable));
|
||||||
|
|
||||||
#ifdef XP_WIN
|
#ifdef XP_WIN
|
||||||
otherHandler.label = this.getFileDisplayName(this.chosenApp.executable);
|
otherHandler.label = this.getFileDisplayName(this.chosenApp.executable);
|
||||||
#else
|
#else
|
||||||
otherHandler.label = this.chosenApp.name;
|
otherHandler.label = this.chosenApp.name;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
this.dialogElement("openHandler").selectedIndex = 1;
|
this.dialogElement("openHandler").selectedIndex = 1;
|
||||||
this.dialogElement("openHandler").setAttribute("lastSelectedItemID", "otherHandler");
|
this.dialogElement("openHandler").setAttribute("lastSelectedItemID", "otherHandler");
|
||||||
|
|
||||||
|
|
@ -1069,40 +1072,40 @@ nsUnknownContentTypeDialog.prototype = {
|
||||||
// Remember the file they chose to run.
|
// Remember the file they chose to run.
|
||||||
this.chosenApp = params.handlerApp;
|
this.chosenApp = params.handlerApp;
|
||||||
}
|
}
|
||||||
#else
|
#else // XP_WIN
|
||||||
#if MOZ_WIDGET_GTK == 3
|
#if MOZ_WIDGET_GTK == 3
|
||||||
var nsIApplicationChooser = Components.interfaces.nsIApplicationChooser;
|
var nsIApplicationChooser = Components.interfaces.nsIApplicationChooser;
|
||||||
var appChooser = Components.classes["@mozilla.org/applicationchooser;1"]
|
var appChooser = Components.classes["@mozilla.org/applicationchooser;1"]
|
||||||
.createInstance(nsIApplicationChooser);
|
.createInstance(nsIApplicationChooser);
|
||||||
appChooser.init(this.mDialog, this.dialogElement("strings").getString("chooseAppFilePickerTitle"));
|
appChooser.init(this.mDialog, this.dialogElement("strings").getString("chooseAppFilePickerTitle"));
|
||||||
var contentTypeDialogObj = this;
|
var contentTypeDialogObj = this;
|
||||||
let appChooserCallback = function appChooserCallback_done(aResult) {
|
let appChooserCallback = function appChooserCallback_done(aResult) {
|
||||||
if (aResult) {
|
if (aResult) {
|
||||||
contentTypeDialogObj.chosenApp = aResult.QueryInterface(Components.interfaces.nsILocalHandlerApp);
|
contentTypeDialogObj.chosenApp = aResult.QueryInterface(Components.interfaces.nsILocalHandlerApp);
|
||||||
}
|
|
||||||
contentTypeDialogObj.finishChooseApp();
|
|
||||||
};
|
|
||||||
appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback);
|
|
||||||
// The finishChooseApp is called from appChooserCallback
|
|
||||||
return;
|
|
||||||
#else
|
|
||||||
var nsIFilePicker = Components.interfaces.nsIFilePicker;
|
|
||||||
var fp = Components.classes["@mozilla.org/filepicker;1"]
|
|
||||||
.createInstance(nsIFilePicker);
|
|
||||||
fp.init(this.mDialog,
|
|
||||||
this.dialogElement("strings").getString("chooseAppFilePickerTitle"),
|
|
||||||
nsIFilePicker.modeOpen);
|
|
||||||
|
|
||||||
fp.appendFilters(nsIFilePicker.filterApps);
|
|
||||||
|
|
||||||
if (fp.show() == nsIFilePicker.returnOK && fp.file) {
|
|
||||||
// Remember the file they chose to run.
|
|
||||||
var localHandlerApp =
|
|
||||||
Components.classes["@mozilla.org/uriloader/local-handler-app;1"].
|
|
||||||
createInstance(Components.interfaces.nsILocalHandlerApp);
|
|
||||||
localHandlerApp.executable = fp.file;
|
|
||||||
this.chosenApp = localHandlerApp;
|
|
||||||
}
|
}
|
||||||
|
contentTypeDialogObj.finishChooseApp();
|
||||||
|
};
|
||||||
|
appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback);
|
||||||
|
// The finishChooseApp is called from appChooserCallback
|
||||||
|
return;
|
||||||
|
#else // MOZ_WIDGET_GTK == 3
|
||||||
|
var nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||||
|
var fp = Components.classes["@mozilla.org/filepicker;1"]
|
||||||
|
.createInstance(nsIFilePicker);
|
||||||
|
fp.init(this.mDialog,
|
||||||
|
this.dialogElement("strings").getString("chooseAppFilePickerTitle"),
|
||||||
|
nsIFilePicker.modeOpen);
|
||||||
|
|
||||||
|
fp.appendFilters(nsIFilePicker.filterApps);
|
||||||
|
|
||||||
|
if (fp.show() == nsIFilePicker.returnOK && fp.file) {
|
||||||
|
// Remember the file they chose to run.
|
||||||
|
var localHandlerApp =
|
||||||
|
Components.classes["@mozilla.org/uriloader/local-handler-app;1"].
|
||||||
|
createInstance(Components.interfaces.nsILocalHandlerApp);
|
||||||
|
localHandlerApp.executable = fp.file;
|
||||||
|
this.chosenApp = localHandlerApp;
|
||||||
|
}
|
||||||
#endif // MOZ_WIDGET_GTK == 3
|
#endif // MOZ_WIDGET_GTK == 3
|
||||||
#endif // XP_WIN
|
#endif // XP_WIN
|
||||||
this.finishChooseApp();
|
this.finishChooseApp();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue