lists.torproject.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

tbb-commits

Thread Start a new thread
Download
Threads by month
  • ----- 2025 -----
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2015 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2014 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
tbb-commits@lists.torproject.org

August 2014

  • 3 participants
  • 290 discussions
[tor-browser/tor-browser-24.7.0esr-3.x-1] fixup! Add canvas image extraction prompt.
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit e3d04fb74ac49a2e3f4d074d0e3ea6edec77b8c3 Author: Isis Lovecruft <isis(a)torproject.org> Date: Sun Aug 17 01:31:03 2014 +0000 fixup! Add canvas image extraction prompt. Modify Pearl Crescent's #7265 patch to log all HTML5 canvas access attempts. --- content/canvas/src/CanvasUtils.cpp | 42 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/content/canvas/src/CanvasUtils.cpp b/content/canvas/src/CanvasUtils.cpp index 203dd92..f2f4536 100644 --- a/content/canvas/src/CanvasUtils.cpp +++ b/content/canvas/src/CanvasUtils.cpp @@ -33,6 +33,8 @@ using namespace mozilla::gfx; #include "mozIThirdPartyUtil.h" #include "nsContentUtils.h" #include "nsUnicharUtils.h" +#include "nsPrintfCString.h" +#include "nsIConsoleService.h" #define TOPIC_CANVAS_PERMISSIONS_PROMPT "canvas-permissions-prompt" #define PERMISSION_CANVAS_EXTRACT_DATA "canvas/extractData" @@ -79,14 +81,40 @@ IsImageExtractionAllowed(nsIDocument *aDocument) isAllowed = (permission == nsIPermissionManager::ALLOW_ACTION); if (!isAllowed && (permission != nsIPermissionManager::DENY_ACTION)) { - // Send notification so that a prompt is displayed. - nsCString spec; - rv = uri->GetSpec(spec); + // Log all attempted canvas access and block access by third parties. + bool isThirdParty = true; + nsIURI *docURI = aDocument->GetDocumentURI(); + rv = thirdPartyUtil->IsThirdPartyURI(uri, docURI, &isThirdParty); + NS_ENSURE_SUCCESS(rv, false); + + nsCString firstPartySpec; + rv = uri->GetSpec(firstPartySpec); + nsCString docSpec; + docURI->GetSpec(docSpec); + nsPrintfCString msg("On %s: blocked access to canvas image data" + " from %s ", // L10n + firstPartySpec.get(), docSpec.get()); + + nsCOMPtr<nsIConsoleService> console + (do_GetService(NS_CONSOLESERVICE_CONTRACTID)); + if (console) + console->LogStringMessage(NS_ConvertUTF8toUTF16(msg).get()); + + // Log every canvas access attempt to stdout if debugging: +#ifdef DEBUG + printf("%s\n", msg.get()); +#endif + // Ensure URI is valid after logging, but before trying to notify the + // user: NS_ENSURE_SUCCESS(rv, false); - nsCOMPtr<nsIObserverService> obs = - mozilla::services::GetObserverService(); - obs->NotifyObservers(win, TOPIC_CANVAS_PERMISSIONS_PROMPT, - NS_ConvertUTF8toUTF16(spec).get()); + + if (!isThirdParty) { + // Send notification so that a prompt is displayed. + nsCOMPtr<nsIObserverService> obs = + mozilla::services::GetObserverService(); + obs->NotifyObservers(win, TOPIC_CANVAS_PERMISSIONS_PROMPT, + NS_ConvertUTF8toUTF16(firstPartySpec).get()); + } } } }
1 0
0 0
[tor-browser/tor-browser-24.7.0esr-3.x-1] fixup! Add canvas image extraction prompt.
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit 5c54c75b5ea3ab1373a530d05f8fc40211d9065e Author: Isis Lovecruft <isis(a)torproject.org> Date: Tue Jul 29 06:04:57 2014 +0000 fixup! Add canvas image extraction prompt. Bug #12684: Make "Not now" default for HTML5 canvas permission dialogue. This alters the `PopupNotification`s [0] which notify users that a website has attempted to access an HTML5 canvas. The new default ordering for buttons is: Not Now Never for this site (recommended) Allow in the future * FIXES #12684 [1] by making "Not Now" the default in the HTML5 canvas fingerprinting permissions dialogue. * ADDS palette icons for HTML5 canvas permissions PopupNotification UI. The image is freely licensed and obtainable from: https://openclipart.org/image/300px/svg_to_png/21620/ben_palette.png * ADDS a CSS whitespace hack from Pearl Crescent to the `CanvasPermissionPromptHelper_init()` function in `browser/base/content/browser.js` for causing the newlines in the `canvas.siteprompt` string (in torbutton.git, in `chrome/locale/en/torbutton.properties`) to render correctly in PopupNotification XUL <description> elements. [2] NOTE: Applying this patch requires an additional patch to TorButton, to store the additional UI strings before localisation. [3] [0]: https://mxr.mozilla.org/mozilla-esr24/source/toolkit/modules/PopupNotificat… [1]: https://bugs.torproject.org/12684 [2]: https://trac.torproject.org/projects/tor/ticket/12684#comment:21 [3]: https://github.com/isislovecruft/torbutton/commit/368e74d62df349b27cf578525… --- browser/base/content/browser.js | 19 ++++++++++++++++--- browser/themes/linux/browser.css | 10 ++++++++-- browser/themes/linux/canvas-popup.svg | 19 +++++++++++++++++++ browser/themes/linux/jar.mn | 1 + browser/themes/osx/browser.css | 10 ++++++++-- browser/themes/osx/canvas-popup.svg | 19 +++++++++++++++++++ browser/themes/osx/jar.mn | 1 + browser/themes/windows/browser.css | 10 ++++++++-- browser/themes/windows/canvas-popup.svg | 19 +++++++++++++++++++ browser/themes/windows/jar.mn | 1 + 10 files changed, 100 insertions(+), 9 deletions(-) diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 1df295a..b4da3f6 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -6034,6 +6034,12 @@ var CanvasPermissionPromptHelper = { init: function CanvasPermissionPromptHelper_init() { + if (document.styleSheets && (document.styleSheets.length > 0)) try { + let ruleText = "panel[popupid=canvas-permissions-prompt] description { white-space: pre-wrap; }"; + let sheet = document.styleSheets[0]; + sheet.insertRule(ruleText, sheet.cssRules.length); + } catch (e) {}; + Services.obs.addObserver(this, this._permissionsPrompt, false); }, @@ -6077,10 +6083,10 @@ var CanvasPermissionPromptHelper = { var message = getLocalizedString("canvas.siteprompt", [ uri.asciiHost ]); var mainAction = { - label: getLocalizedString("canvas.allow"), - accessKey: getLocalizedString("canvas.allowAccessKey"), + label: getLocalizedString("canvas.notNow"), + accessKey: getLocalizedString("canvas.notNowAccessKey"), callback: function() { - setCanvasPermission(uri, Ci.nsIPermissionManager.ALLOW_ACTION); + return null; } }; @@ -6091,6 +6097,13 @@ var CanvasPermissionPromptHelper = { callback: function() { setCanvasPermission(uri, Ci.nsIPermissionManager.DENY_ACTION); } + }, + { + label: getLocalizedString("canvas.allow"), + accessKey: getLocalizedString("canvas.allowAccessKey"), + callback: function() { + setCanvasPermission(uri, Ci.nsIPermissionManager.ALLOW_ACTION); + } } ]; diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css index 9395669..a47ea4e 100644 --- a/browser/themes/linux/browser.css +++ b/browser/themes/linux/browser.css @@ -1207,7 +1207,10 @@ toolbar[iconsize="small"] #webrtc-status-button { list-style-image: url("moz-icon://stock/gtk-cancel?size=menu"); } -.popup-notification-icon[popupid="canvas-permissions-prompt"], +.popup-notification-icon[popupid="canvas-permissions-prompt"] { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .popup-notification-icon[popupid="indexedDB-permissions-prompt"], .popup-notification-icon[popupid="indexedDB-quota-prompt"], .popup-notification-icon[popupid*="offline-app-requested"], @@ -1291,7 +1294,10 @@ toolbar[iconsize="small"] #webrtc-status-button { list-style-image: url(chrome://mozapps/skin/extensions/extensionGeneric-16.png); } -#canvas-notification-icon, +#canvas-notification-icon { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .indexedDB-notification-icon, #indexedDB-notification-icon { list-style-image: url(chrome://global/skin/icons/question-16.png); diff --git a/browser/themes/linux/canvas-popup.svg b/browser/themes/linux/canvas-popup.svg new file mode 100644 index 0000000..f99eac3 --- /dev/null +++ b/browser/themes/linux/canvas-popup.svg @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"> + + <metadata>image/svg+xmlOpen Clip Art Librarypalette2009-02-17T21:15:25http://openclipart.org/detail/21620/palett… artclipartcolorcoloriconiconimagemediapaintpaintpalettepalettepngpublic domainsvg</metadata> + <g> + <title>Layer 1</title> + <g id="layer1"> + <rect fill="#000000" stroke-width="2" stroke-miterlimit="4" stroke-dashoffset="0" ry="23.587006" rx="26.785715" y="0" x="0" height="200" width="200" id="rect6786"/> + <g transform="matrix(4.65116, 0, 0, 4.65116, -1717.85, -314.201)" id="g6820"> + <path fill="#ffffff" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" d="m388.618042,70.128563c-4.746887,0 -18.367279,0.849472 -18.34375,12.3125c0.001312,0.644249 1.226776,2.886879 2.25,3.125c7.5755,1.762962 7.986664,7.834511 7.53125,12.625c-0.03479,0.362747 0.589233,2.891006 1.125,3.53125c4.344635,5.191872 5.822723,7.468742 11.6875,7.46875c11.729614,0 18.3125,-5.93206 18.3125,-17.8125c0,-11.880463 -10.832916,-21.25 -22.5625,-21.25zm-11.875,8.1875c0.986481,0.058029 2.139893,0.464394 3.21875,1.1875c2.157715,1.44622 3.225708,3.668251 2.375,4.9375c-0.850739,1.269257 -3.311005,1.10247 -5.46875,-0.34375c-2.157745,-1.446228 -3.194458,-3.637001 -2.34375,-4.90625c0.425354,-0.634628 1.232269,-0.933029 2.21875,-0.875z" id="path6822"/> + <path fill="#ff7a00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6824" d="m392.586761,76.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#95d300" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6826" d="m402.524292,81.553246a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#00a6e4" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6828" d="m408.461792,90.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#f9de00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6830" d="m403.643463,99.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#e600ad" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6832" d="m393.518463,100.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/browser/themes/linux/jar.mn b/browser/themes/linux/jar.mn index b4eaf14..4d1892d 100644 --- a/browser/themes/linux/jar.mn +++ b/browser/themes/linux/jar.mn @@ -231,6 +231,7 @@ browser.jar: skin/classic/browser/syncQuota.css skin/classic/browser/syncProgress.css #endif + skin/classic/browser/canvas-popup.svg skin/classic/browser/webapps-16.png skin/classic/browser/webapps-64.png skin/classic/browser/notification-pluginNormal.png (../shared/plugins/notification-pluginNormal.png) diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css index 4166ed0..085a1da 100644 --- a/browser/themes/osx/browser.css +++ b/browser/themes/osx/browser.css @@ -3103,7 +3103,10 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker { -moz-margin-start: 0; /* override default label margin to match description margin */ } -#canvas-notification-icon, +#canvas-notification-icon { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .indexedDB-notification-icon, #indexedDB-notification-icon { list-style-image: url(chrome://global/skin/icons/question-16.png); @@ -3375,7 +3378,10 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker { -moz-image-region: rect(0px, 48px, 16px, 32px); } -.popup-notification-icon[popupid="canvas-permissions-prompt"], +.popup-notification-icon[popupid="canvas-permissions-prompt"] { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .popup-notification-icon[popupid="indexedDB-permissions-prompt"], .popup-notification-icon[popupid="indexedDB-quota-prompt"], .popup-notification-icon[popupid*="offline-app-requested"], diff --git a/browser/themes/osx/canvas-popup.svg b/browser/themes/osx/canvas-popup.svg new file mode 100644 index 0000000..f99eac3 --- /dev/null +++ b/browser/themes/osx/canvas-popup.svg @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"> + + <metadata>image/svg+xmlOpen Clip Art Librarypalette2009-02-17T21:15:25http://openclipart.org/detail/21620/palett… artclipartcolorcoloriconiconimagemediapaintpaintpalettepalettepngpublic domainsvg</metadata> + <g> + <title>Layer 1</title> + <g id="layer1"> + <rect fill="#000000" stroke-width="2" stroke-miterlimit="4" stroke-dashoffset="0" ry="23.587006" rx="26.785715" y="0" x="0" height="200" width="200" id="rect6786"/> + <g transform="matrix(4.65116, 0, 0, 4.65116, -1717.85, -314.201)" id="g6820"> + <path fill="#ffffff" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" d="m388.618042,70.128563c-4.746887,0 -18.367279,0.849472 -18.34375,12.3125c0.001312,0.644249 1.226776,2.886879 2.25,3.125c7.5755,1.762962 7.986664,7.834511 7.53125,12.625c-0.03479,0.362747 0.589233,2.891006 1.125,3.53125c4.344635,5.191872 5.822723,7.468742 11.6875,7.46875c11.729614,0 18.3125,-5.93206 18.3125,-17.8125c0,-11.880463 -10.832916,-21.25 -22.5625,-21.25zm-11.875,8.1875c0.986481,0.058029 2.139893,0.464394 3.21875,1.1875c2.157715,1.44622 3.225708,3.668251 2.375,4.9375c-0.850739,1.269257 -3.311005,1.10247 -5.46875,-0.34375c-2.157745,-1.446228 -3.194458,-3.637001 -2.34375,-4.90625c0.425354,-0.634628 1.232269,-0.933029 2.21875,-0.875z" id="path6822"/> + <path fill="#ff7a00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6824" d="m392.586761,76.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#95d300" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6826" d="m402.524292,81.553246a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#00a6e4" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6828" d="m408.461792,90.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#f9de00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6830" d="m403.643463,99.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#e600ad" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6832" d="m393.518463,100.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/browser/themes/osx/jar.mn b/browser/themes/osx/jar.mn index 8295008..de119b1 100644 --- a/browser/themes/osx/jar.mn +++ b/browser/themes/osx/jar.mn @@ -329,6 +329,7 @@ browser.jar: skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon(a)2x.png (tabbrowser/alltabs-box-bkgnd-icon-lion(a)2x.png) skin/classic/browser/lion/tabview/tabview.png (tabview/tabview-lion.png) skin/classic/browser/lion/places/toolbar.png (places/toolbar-lion.png) + skin/classic/browser/canvas-popup.svg skin/classic/browser/webapps-16.png skin/classic/browser/webapps-16(a)2x.png skin/classic/browser/webapps-64.png diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css index edb064c..7012c41 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -2449,7 +2449,10 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] { -moz-image-region: rect(32px, 32px, 48px, 16px); } -.popup-notification-icon[popupid="canvas-permissions-prompt"], +.popup-notification-icon[popupid="canvas-permissions-prompt"] { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .popup-notification-icon[popupid="indexedDB-permissions-prompt"], .popup-notification-icon[popupid="indexedDB-quota-prompt"], .popup-notification-icon[popupid*="offline-app-requested"], @@ -2531,7 +2534,10 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] { list-style-image: url(chrome://mozapps/skin/extensions/extensionGeneric-16.png); } -#canvas-notification-icon, +#canvas-notification-icon { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .indexedDB-notification-icon, #indexedDB-notification-icon { list-style-image: url(chrome://global/skin/icons/question-16.png); diff --git a/browser/themes/windows/canvas-popup.svg b/browser/themes/windows/canvas-popup.svg new file mode 100644 index 0000000..f99eac3 --- /dev/null +++ b/browser/themes/windows/canvas-popup.svg @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"> + + <metadata>image/svg+xmlOpen Clip Art Librarypalette2009-02-17T21:15:25http://openclipart.org/detail/21620/palett… artclipartcolorcoloriconiconimagemediapaintpaintpalettepalettepngpublic domainsvg</metadata> + <g> + <title>Layer 1</title> + <g id="layer1"> + <rect fill="#000000" stroke-width="2" stroke-miterlimit="4" stroke-dashoffset="0" ry="23.587006" rx="26.785715" y="0" x="0" height="200" width="200" id="rect6786"/> + <g transform="matrix(4.65116, 0, 0, 4.65116, -1717.85, -314.201)" id="g6820"> + <path fill="#ffffff" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" d="m388.618042,70.128563c-4.746887,0 -18.367279,0.849472 -18.34375,12.3125c0.001312,0.644249 1.226776,2.886879 2.25,3.125c7.5755,1.762962 7.986664,7.834511 7.53125,12.625c-0.03479,0.362747 0.589233,2.891006 1.125,3.53125c4.344635,5.191872 5.822723,7.468742 11.6875,7.46875c11.729614,0 18.3125,-5.93206 18.3125,-17.8125c0,-11.880463 -10.832916,-21.25 -22.5625,-21.25zm-11.875,8.1875c0.986481,0.058029 2.139893,0.464394 3.21875,1.1875c2.157715,1.44622 3.225708,3.668251 2.375,4.9375c-0.850739,1.269257 -3.311005,1.10247 -5.46875,-0.34375c-2.157745,-1.446228 -3.194458,-3.637001 -2.34375,-4.90625c0.425354,-0.634628 1.232269,-0.933029 2.21875,-0.875z" id="path6822"/> + <path fill="#ff7a00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6824" d="m392.586761,76.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#95d300" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6826" d="m402.524292,81.553246a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#00a6e4" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6828" d="m408.461792,90.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#f9de00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6830" d="m403.643463,99.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#e600ad" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6832" d="m393.518463,100.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/browser/themes/windows/jar.mn b/browser/themes/windows/jar.mn index eff2220..b9cf33a 100644 --- a/browser/themes/windows/jar.mn +++ b/browser/themes/windows/jar.mn @@ -69,6 +69,7 @@ browser.jar: skin/classic/browser/urlbar-arrow.png skin/classic/browser/urlbar-popup-blocked.png skin/classic/browser/urlbar-history-dropmarker.png + skin/classic/browser/canvas-popup.svg skin/classic/browser/webapps-16.png skin/classic/browser/webapps-64.png skin/classic/browser/notification-pluginNormal.png (../shared/plugins/notification-pluginNormal.png)
1 0
0 0
[tor-browser/tor-browser-24.7.0esr-3.x-1] fixup! Remove the Components shim introduced by Mozilla Bug #790732.
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit 1cd9a584a5a77089b3d03324e87451e28c09a58e Author: Arthur Edelstein <arthuredelstein(a)gmail.com> Date: Tue Aug 12 15:14:39 2014 -0700 fixup! Remove the Components shim introduced by Mozilla Bug #790732. Includes a regression test to ensure the window.Components object is not exposed to untrusted content. --- dom/base/nsDOMClassInfo.cpp | 98 -------------------- js/xpconnect/tests/mochitest/Makefile.in | 3 +- js/xpconnect/tests/mochitest/file_bug790732.html | 56 ----------- js/xpconnect/tests/mochitest/test_bug790732.html | 46 --------- js/xpconnect/tests/mochitest/test_tor_bug2874.html | 25 +++++ toolkit/components/telemetry/Histograms.json | 4 - 6 files changed, 26 insertions(+), 206 deletions(-) diff --git a/dom/base/nsDOMClassInfo.cpp b/dom/base/nsDOMClassInfo.cpp index e5fcebf..2a9d5a8 100644 --- a/dom/base/nsDOMClassInfo.cpp +++ b/dom/base/nsDOMClassInfo.cpp @@ -4282,98 +4282,6 @@ LocationSetterUnwrapper(JSContext *cx, JS::Handle<JSObject*> obj_, JS::Handle<js return LocationSetter<nsIDOMWindow>(cx, obj, id, strict, vp); } -struct InterfaceShimEntry { - const char *geckoName; - const char *domName; -}; - -// We add shims from Components.interfaces.nsIDOMFoo to window.Foo for each -// interface that has interface constants that sites might be getting off -// of Ci. -const InterfaceShimEntry kInterfaceShimMap[] = -{ { "nsIDOMFileReader", "FileReader" }, - { "nsIXMLHttpRequest", "XMLHttpRequest" }, - { "nsIDOMDOMException", "DOMException" }, - { "nsIDOMNode", "Node" }, - { "nsIDOMUserDataHandler", "UserDataHandler" }, - { "nsIDOMCSSPrimitiveValue", "CSSPrimitiveValue" }, - { "nsIDOMCSSRule", "CSSRule" }, - { "nsIDOMCSSValue", "CSSValue" }, - { "nsIDOMEvent", "Event" }, - { "nsIDOMNSEvent", "Event" }, - { "nsIDOMKeyEvent", "KeyEvent" }, - { "nsIDOMMouseEvent", "MouseEvent" }, - { "nsIDOMMouseScrollEvent", "MouseScrollEvent" }, - { "nsIDOMMutationEvent", "MutationEvent" }, - { "nsIDOMSimpleGestureEvent", "SimpleGestureEvent" }, - { "nsIDOMUIEvent", "UIEvent" }, - { "nsIDOMGeoPositionError", "GeoPositionError" }, - { "nsIDOMHTMLMediaElement", "HTMLMediaElement" }, - { "nsIDOMMediaError", "MediaError" }, - { "nsIDOMLoadStatus", "LoadStatus" }, - { "nsIDOMOfflineResourceList", "OfflineResourceList" }, - { "nsIDOMRange", "Range" }, - { "nsIDOMSVGFETurbulenceElement", "SVGFETurbulenceElement" }, - { "nsIDOMSVGFEMorphologyElement", "SVGFEMorphologyElement" }, - { "nsIDOMSVGFEConvolveMatrixElement", "SVGFEConvolveMatrixElement" }, - { "nsIDOMSVGFEDisplacementMapElement", "SVGFEDisplacementMapElement" }, - { "nsIDOMSVGLength", "SVGLength" }, - { "nsIDOMSVGUnitTypes", "SVGUnitTypes" }, - { "nsIDOMNodeFilter", "NodeFilter" }, - { "nsIDOMXPathNamespace", "XPathNamespace" }, - { "nsIDOMXPathResult", "XPathResult" }, - { "nsIDOMXULButtonElement", "XULButtonElement" }, - { "nsIDOMXULCheckboxElement", "XULCheckboxElement" }, - { "nsIDOMXULPopupElement", "XULPopupElement" } }; - -static nsresult -DefineComponentsShim(JSContext *cx, JS::HandleObject global) -{ - // Keep track of how often this happens. - Telemetry::Accumulate(Telemetry::COMPONENTS_SHIM_ACCESSED_BY_CONTENT, true); - - // Create a fake Components object. - JS::Rooted<JSObject*> components(cx, JS_NewObject(cx, nullptr, nullptr, global)); - NS_ENSURE_TRUE(components, NS_ERROR_OUT_OF_MEMORY); - bool ok = JS_DefineProperty(cx, global, "Components", JS::ObjectValue(*components), - JS_PropertyStub, JS_StrictPropertyStub, JSPROP_ENUMERATE); - NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY); - - // Create a fake interfaces object. - JS::Rooted<JSObject*> interfaces(cx, JS_NewObject(cx, nullptr, nullptr, global)); - NS_ENSURE_TRUE(interfaces, NS_ERROR_OUT_OF_MEMORY); - ok = JS_DefineProperty(cx, components, "interfaces", JS::ObjectValue(*interfaces), - JS_PropertyStub, JS_StrictPropertyStub, - JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); - NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY); - - // Define a bunch of shims from the Ci.nsIDOMFoo to window.Foo for DOM - // interfaces with constants. - for (uint32_t i = 0; i < ArrayLength(kInterfaceShimMap); ++i) { - - // Grab the names from the table. - const char *geckoName = kInterfaceShimMap[i].geckoName; - const char *domName = kInterfaceShimMap[i].domName; - - // Look up the appopriate interface object on the global. - JS::Rooted<JS::Value> v(cx, JS::UndefinedValue()); - ok = JS_GetProperty(cx, global, domName, v.address()); - NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY); - if (!v.isObject()) { - NS_WARNING("Unable to find interface object on global"); - continue; - } - - // Define the shim on the interfaces object. - ok = JS_DefineProperty(cx, interfaces, geckoName, v, - JS_PropertyStub, JS_StrictPropertyStub, - JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); - NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY); - } - - return NS_OK; -} - NS_IMETHODIMP nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx, JSObject *obj_, jsid id_, uint32_t flags, @@ -4386,12 +4294,6 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx, return NS_OK; } - MOZ_ASSERT(*_retval == true); // guaranteed by XPC_WN_Helper_NewResolve - if (id == XPCJSRuntime::Get()->GetStringID(XPCJSRuntime::IDX_COMPONENTS)) { - *objp = obj; - return DefineComponentsShim(cx, obj); - } - nsGlobalWindow *win = nsGlobalWindow::FromWrapper(wrapper); MOZ_ASSERT(win->IsInnerWindow()); diff --git a/js/xpconnect/tests/mochitest/Makefile.in b/js/xpconnect/tests/mochitest/Makefile.in index e3e1b63..666d1e2 100644 --- a/js/xpconnect/tests/mochitest/Makefile.in +++ b/js/xpconnect/tests/mochitest/Makefile.in @@ -80,8 +80,6 @@ MOCHITEST_FILES = chrome_wrappers_helper.html \ file_bug781476.html \ test_bug785096.html \ test_bug789713.html \ - test_bug790732.html \ - file_bug790732.html \ test_bug793969.html \ file_bug795275.html \ file_bug795275.xml \ @@ -101,6 +99,7 @@ MOCHITEST_FILES = chrome_wrappers_helper.html \ test_crosscompartment_weakmap.html \ test_asmjs.html \ file_asmjs.js \ + test_tor_bug2874.html \ $(NULL) include $(topsrcdir)/config/rules.mk diff --git a/js/xpconnect/tests/mochitest/file_bug790732.html b/js/xpconnect/tests/mochitest/file_bug790732.html deleted file mode 100644 index 5515dfc..0000000 --- a/js/xpconnect/tests/mochitest/file_bug790732.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script> -function testShim() { - - // Basic stuff - ok(Components, "Components shim exists!"); - var Ci = Components.interfaces; - ok(Ci, "interfaces shim exists!"); - is(typeof Components.classes, 'undefined', "Shouldn't have a Cc"); - - // Check each interface that we shim. We start by checking specific - // constants for a couple of interfaces, and then once it's pretty clear that - // it's working as intended we just check that the objects themselves are the - // same. - is(Ci.nsIDOMFileReader.DONE, FileReader.DONE); - is(Ci.nsIXMLHttpRequest.HEADERS_RECEIVED, XMLHttpRequest.HEADERS_RECEIVED); - is(Ci.nsIDOMDOMException.DATA_CLONE_ERR, DOMException.DATA_CLONE_ERR); - is(Ci.nsIDOMNode.DOCUMENT_NODE, Node.DOCUMENT_NODE); - is(Ci.nsIDOMUserDataHandler.NODE_CLONED, UserDataHandler.NODE_CLONED); - is(Ci.nsIDOMCSSPrimitiveValue.CSS_PX, CSSPrimitiveValue.CSS_PX); - is(Ci.nsIDOMCSSRule.NAMESPACE_RULE, CSSRule.NAMESPACE_RULE); - is(Ci.nsIDOMCSSValue.CSS_PRIMITIVE_VALUE, CSSValue.CSS_PRIMITIVE_VALUE); - is(Ci.nsIDOMEvent.FOCUS, Event.FOCUS); - is(Ci.nsIDOMNSEvent.CLICK, Event.CLICK); - is(Ci.nsIDOMKeyEvent, KeyEvent); - is(Ci.nsIDOMMouseEvent, MouseEvent); - is(Ci.nsIDOMMouseScrollEvent, MouseScrollEvent); - is(Ci.nsIDOMMutationEvent, MutationEvent); - is(Ci.nsIDOMSimpleGestureEvent, SimpleGestureEvent); - is(Ci.nsIDOMUIEvent, UIEvent); - is(Ci.nsIDOMGeoPositionError, GeoPositionError); - is(Ci.nsIDOMHTMLMediaElement, HTMLMediaElement); - is(Ci.nsIDOMMediaError, MediaError); - is(Ci.nsIDOMLoadStatus, LoadStatus); - is(Ci.nsIDOMOfflineResourceList, OfflineResourceList); - is(Ci.nsIDOMRange, Range); - is(Ci.nsIDOMSVGFETurbulenceElement, SVGFETurbulenceElement); - is(Ci.nsIDOMSVGFEMorphologyElement, SVGFEMorphologyElement); - is(Ci.nsIDOMSVGFEConvolveMatrixElement, SVGFEConvolveMatrixElement); - is(Ci.nsIDOMSVGFEDisplacementMapElement, SVGFEDisplacementMapElement); - is(Ci.nsIDOMSVGLength, SVGLength); - is(Ci.nsIDOMSVGUnitTypes, SVGUnitTypes); - is(Ci.nsIDOMNodeFilter, NodeFilter); - is(Ci.nsIDOMXPathNamespace, XPathNamespace); - is(Ci.nsIDOMXPathResult, XPathResult); - is(Ci.nsIDOMXULButtonElement, XULButtonElement); - is(Ci.nsIDOMXULCheckboxElement, XULCheckboxElement); - is(Ci.nsIDOMXULPopupElement, XULPopupElement); -} -</script> -</head> -<body> -</body> -</html> diff --git a/js/xpconnect/tests/mochitest/test_bug790732.html b/js/xpconnect/tests/mochitest/test_bug790732.html deleted file mode 100644 index 771950e..0000000 --- a/js/xpconnect/tests/mochitest/test_bug790732.html +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE HTML> -<html> -<!-- -https://bugzilla.mozilla.org/show_bug.cgi?id=790732 ---> -<head> - <meta charset="utf-8"> - <title>Test for Bug 790732</title> - <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> - <script type="application/javascript"> - - /** Test for the Components shim. We split into two files because this stuff - is currently pref-controlled. **/ - SimpleTest.waitForExplicitFinish(); - - function prepare() { - SpecialPowers.pushPrefEnv({set: [['dom.omit_components_in_content', true]]}, - function () { $('ifr').onload = go; - $('ifr').contentWindow.location = - '/tests/js/xpconnect/tests/mochitest/file_bug790732.html'; } - ); - } - - function go() { - ok(true, "Started test"); - var iwin = $('ifr').contentWindow; - iwin.ok = ok; - iwin.is = is; - iwin.testShim(); - SimpleTest.finish(); - } - - </script> -</head> -<body onload="prepare()"> -<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=790732">Mozilla Bug 790732</a> -<p id="display"></p> -<div id="content" style="display: none"> - -</div> -<pre id="test"> -</pre> -<iframe id="ifr"></iframe> -</body> -</html> diff --git a/js/xpconnect/tests/mochitest/test_tor_bug2874.html b/js/xpconnect/tests/mochitest/test_tor_bug2874.html new file mode 100644 index 0000000..c0a956e --- /dev/null +++ b/js/xpconnect/tests/mochitest/test_tor_bug2874.html @@ -0,0 +1,25 @@ +<!DOCTYPE HTML> +<html> +<!-- +Tor bug +https://trac.torproject.org/projects/tor/ticket/2874 +--> +<head> + <meta charset="utf-8"> + <title>Test for Tor Bug 2874</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + <script type="application/javascript"> + is(typeof Components, 'undefined', "The global window object should not expose a Components property to untrusted content."); + </script> +</head> +<body> +<a target="_blank" href="https://trac.torproject.org/projects/tor/ticket/2874">Tor Bug 2874</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +</pre> +</body> +</html> diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index 9698fac..5594e01 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -2955,10 +2955,6 @@ "kind": "flag", "description": "Whether content ever accesed Components.interfaces in this session" }, - "COMPONENTS_SHIM_ACCESSED_BY_CONTENT": { - "kind": "flag", - "description": "Whether content ever accesed the Components shim in this session" - }, "CHECK_ADDONS_MODIFIED_MS": { "kind": "exponential", "high": "5000",
1 0
0 0
[tor-browser/tor-browser-24.7.0esr-3.x-1] fixup! API allows you to get the url bar URI for a channel or nsIDocument.
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit 8751adf3f98016212a3aac2d5a12e59b2e425d5a Author: Mike Perry <mikeperry-git(a)torproject.org> Date: Sat Aug 16 19:25:57 2014 -0700 fixup! API allows you to get the url bar URI for a channel or nsIDocument. Log the URI of the source doc/channel that failed. --- content/base/src/ThirdPartyUtil.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/content/base/src/ThirdPartyUtil.cpp b/content/base/src/ThirdPartyUtil.cpp index 55eb316..569201e 100644 --- a/content/base/src/ThirdPartyUtil.cpp +++ b/content/base/src/ThirdPartyUtil.cpp @@ -427,6 +427,7 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel, nsIURI **aOutput) { nsresult rv = NS_ERROR_NULL_POINTER; + nsCOMPtr<nsIURI> srcURI; if (!aOutput) return rv; @@ -441,6 +442,7 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel, // for sure if (aChannel) { rv = GetOriginatingURI(aChannel, aOutput); + aChannel->GetURI(getter_AddRefs(srcURI)); if (NS_SUCCEEDED(rv) && *aOutput) { // At this point, about: and chrome: URLs have been mapped to file: or // jar: URLs. Try to recover the original URL. @@ -467,6 +469,7 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel, nsCOMPtr<nsIDOMWindow> top; nsCOMPtr<nsIDOMDocument> topDDoc; nsIURI *docURI = nullptr; + srcURI = aDoc->GetDocumentURI(); if (aDoc->GetWindow()) { aDoc->GetWindow()->GetTop(getter_AddRefs(top)); @@ -505,14 +508,19 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel, (do_GetService(NS_CONSOLESERVICE_CONTRACTID)); if (console) { nsCString spec; + nsCString srcSpec("unknown"); + + if (srcURI) + srcURI->GetSpec(srcSpec); + if (*aOutput) (*aOutput)->GetSpec(spec); if (spec.Length() > 0) { - nsPrintfCString msg("getFirstPartyURI: no host in first party URI %s", - spec.get()); // TODO: L10N + nsPrintfCString msg("getFirstPartyURI failed for %s: no host in first party URI %s", + srcSpec.get(), spec.get()); // TODO: L10N console->LogStringMessage(NS_ConvertUTF8toUTF16(msg).get()); } else { - nsPrintfCString msg("getFirstPartyURI failed: 0x%x", rv); + nsPrintfCString msg("getFirstPartyURI failed for %s: 0x%x", srcSpec.get(), rv); console->LogStringMessage(NS_ConvertUTF8toUTF16(msg).get()); } }
1 0
0 0
[tor-browser/tor-browser-24.7.0esr-4.x-2] fixup! Bug #6253: Add canvas image extraction prompt.
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit 00ad0bffa709d34e393a3b271d768d4e8a466864 Author: Isis Lovecruft <isis(a)torproject.org> Date: Tue Jul 29 06:04:57 2014 +0000 fixup! Bug #6253: Add canvas image extraction prompt. Bug #12684: Make "Not now" default for HTML5 canvas permission dialogue. This alters the `PopupNotification`s [0] which notify users that a website has attempted to access an HTML5 canvas. The new default ordering for buttons is: Not Now Never for this site (recommended) Allow in the future * FIXES #12684 [1] by making "Not Now" the default in the HTML5 canvas fingerprinting permissions dialogue. * ADDS palette icons for HTML5 canvas permissions PopupNotification UI. The image is freely licensed and obtainable from: https://openclipart.org/image/300px/svg_to_png/21620/ben_palette.png * ADDS a CSS whitespace hack from Pearl Crescent to the `CanvasPermissionPromptHelper_init()` function in `browser/base/content/browser.js` for causing the newlines in the `canvas.siteprompt` string (in torbutton.git, in `chrome/locale/en/torbutton.properties`) to render correctly in PopupNotification XUL <description> elements. [2] NOTE: Applying this patch requires an additional patch to TorButton, to store the additional UI strings before localisation. [3] [0]: https://mxr.mozilla.org/mozilla-esr24/source/toolkit/modules/PopupNotificat… [1]: https://bugs.torproject.org/12684 [2]: https://trac.torproject.org/projects/tor/ticket/12684#comment:21 [3]: https://github.com/isislovecruft/torbutton/commit/368e74d62df349b27cf578525… --- browser/base/content/browser.js | 19 ++++++++++++++++--- browser/themes/linux/browser.css | 10 ++++++++-- browser/themes/linux/canvas-popup.svg | 19 +++++++++++++++++++ browser/themes/linux/jar.mn | 1 + browser/themes/osx/browser.css | 10 ++++++++-- browser/themes/osx/canvas-popup.svg | 19 +++++++++++++++++++ browser/themes/osx/jar.mn | 1 + browser/themes/windows/browser.css | 10 ++++++++-- browser/themes/windows/canvas-popup.svg | 19 +++++++++++++++++++ browser/themes/windows/jar.mn | 1 + 10 files changed, 100 insertions(+), 9 deletions(-) diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 1df295a..b4da3f6 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -6034,6 +6034,12 @@ var CanvasPermissionPromptHelper = { init: function CanvasPermissionPromptHelper_init() { + if (document.styleSheets && (document.styleSheets.length > 0)) try { + let ruleText = "panel[popupid=canvas-permissions-prompt] description { white-space: pre-wrap; }"; + let sheet = document.styleSheets[0]; + sheet.insertRule(ruleText, sheet.cssRules.length); + } catch (e) {}; + Services.obs.addObserver(this, this._permissionsPrompt, false); }, @@ -6077,10 +6083,10 @@ var CanvasPermissionPromptHelper = { var message = getLocalizedString("canvas.siteprompt", [ uri.asciiHost ]); var mainAction = { - label: getLocalizedString("canvas.allow"), - accessKey: getLocalizedString("canvas.allowAccessKey"), + label: getLocalizedString("canvas.notNow"), + accessKey: getLocalizedString("canvas.notNowAccessKey"), callback: function() { - setCanvasPermission(uri, Ci.nsIPermissionManager.ALLOW_ACTION); + return null; } }; @@ -6091,6 +6097,13 @@ var CanvasPermissionPromptHelper = { callback: function() { setCanvasPermission(uri, Ci.nsIPermissionManager.DENY_ACTION); } + }, + { + label: getLocalizedString("canvas.allow"), + accessKey: getLocalizedString("canvas.allowAccessKey"), + callback: function() { + setCanvasPermission(uri, Ci.nsIPermissionManager.ALLOW_ACTION); + } } ]; diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css index 9395669..a47ea4e 100644 --- a/browser/themes/linux/browser.css +++ b/browser/themes/linux/browser.css @@ -1207,7 +1207,10 @@ toolbar[iconsize="small"] #webrtc-status-button { list-style-image: url("moz-icon://stock/gtk-cancel?size=menu"); } -.popup-notification-icon[popupid="canvas-permissions-prompt"], +.popup-notification-icon[popupid="canvas-permissions-prompt"] { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .popup-notification-icon[popupid="indexedDB-permissions-prompt"], .popup-notification-icon[popupid="indexedDB-quota-prompt"], .popup-notification-icon[popupid*="offline-app-requested"], @@ -1291,7 +1294,10 @@ toolbar[iconsize="small"] #webrtc-status-button { list-style-image: url(chrome://mozapps/skin/extensions/extensionGeneric-16.png); } -#canvas-notification-icon, +#canvas-notification-icon { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .indexedDB-notification-icon, #indexedDB-notification-icon { list-style-image: url(chrome://global/skin/icons/question-16.png); diff --git a/browser/themes/linux/canvas-popup.svg b/browser/themes/linux/canvas-popup.svg new file mode 100644 index 0000000..f99eac3 --- /dev/null +++ b/browser/themes/linux/canvas-popup.svg @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"> + + <metadata>image/svg+xmlOpen Clip Art Librarypalette2009-02-17T21:15:25http://openclipart.org/detail/21620/palett… artclipartcolorcoloriconiconimagemediapaintpaintpalettepalettepngpublic domainsvg</metadata> + <g> + <title>Layer 1</title> + <g id="layer1"> + <rect fill="#000000" stroke-width="2" stroke-miterlimit="4" stroke-dashoffset="0" ry="23.587006" rx="26.785715" y="0" x="0" height="200" width="200" id="rect6786"/> + <g transform="matrix(4.65116, 0, 0, 4.65116, -1717.85, -314.201)" id="g6820"> + <path fill="#ffffff" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" d="m388.618042,70.128563c-4.746887,0 -18.367279,0.849472 -18.34375,12.3125c0.001312,0.644249 1.226776,2.886879 2.25,3.125c7.5755,1.762962 7.986664,7.834511 7.53125,12.625c-0.03479,0.362747 0.589233,2.891006 1.125,3.53125c4.344635,5.191872 5.822723,7.468742 11.6875,7.46875c11.729614,0 18.3125,-5.93206 18.3125,-17.8125c0,-11.880463 -10.832916,-21.25 -22.5625,-21.25zm-11.875,8.1875c0.986481,0.058029 2.139893,0.464394 3.21875,1.1875c2.157715,1.44622 3.225708,3.668251 2.375,4.9375c-0.850739,1.269257 -3.311005,1.10247 -5.46875,-0.34375c-2.157745,-1.446228 -3.194458,-3.637001 -2.34375,-4.90625c0.425354,-0.634628 1.232269,-0.933029 2.21875,-0.875z" id="path6822"/> + <path fill="#ff7a00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6824" d="m392.586761,76.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#95d300" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6826" d="m402.524292,81.553246a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#00a6e4" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6828" d="m408.461792,90.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#f9de00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6830" d="m403.643463,99.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#e600ad" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6832" d="m393.518463,100.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/browser/themes/linux/jar.mn b/browser/themes/linux/jar.mn index b4eaf14..4d1892d 100644 --- a/browser/themes/linux/jar.mn +++ b/browser/themes/linux/jar.mn @@ -231,6 +231,7 @@ browser.jar: skin/classic/browser/syncQuota.css skin/classic/browser/syncProgress.css #endif + skin/classic/browser/canvas-popup.svg skin/classic/browser/webapps-16.png skin/classic/browser/webapps-64.png skin/classic/browser/notification-pluginNormal.png (../shared/plugins/notification-pluginNormal.png) diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css index 4166ed0..085a1da 100644 --- a/browser/themes/osx/browser.css +++ b/browser/themes/osx/browser.css @@ -3103,7 +3103,10 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker { -moz-margin-start: 0; /* override default label margin to match description margin */ } -#canvas-notification-icon, +#canvas-notification-icon { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .indexedDB-notification-icon, #indexedDB-notification-icon { list-style-image: url(chrome://global/skin/icons/question-16.png); @@ -3375,7 +3378,10 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker { -moz-image-region: rect(0px, 48px, 16px, 32px); } -.popup-notification-icon[popupid="canvas-permissions-prompt"], +.popup-notification-icon[popupid="canvas-permissions-prompt"] { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .popup-notification-icon[popupid="indexedDB-permissions-prompt"], .popup-notification-icon[popupid="indexedDB-quota-prompt"], .popup-notification-icon[popupid*="offline-app-requested"], diff --git a/browser/themes/osx/canvas-popup.svg b/browser/themes/osx/canvas-popup.svg new file mode 100644 index 0000000..f99eac3 --- /dev/null +++ b/browser/themes/osx/canvas-popup.svg @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"> + + <metadata>image/svg+xmlOpen Clip Art Librarypalette2009-02-17T21:15:25http://openclipart.org/detail/21620/palett… artclipartcolorcoloriconiconimagemediapaintpaintpalettepalettepngpublic domainsvg</metadata> + <g> + <title>Layer 1</title> + <g id="layer1"> + <rect fill="#000000" stroke-width="2" stroke-miterlimit="4" stroke-dashoffset="0" ry="23.587006" rx="26.785715" y="0" x="0" height="200" width="200" id="rect6786"/> + <g transform="matrix(4.65116, 0, 0, 4.65116, -1717.85, -314.201)" id="g6820"> + <path fill="#ffffff" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" d="m388.618042,70.128563c-4.746887,0 -18.367279,0.849472 -18.34375,12.3125c0.001312,0.644249 1.226776,2.886879 2.25,3.125c7.5755,1.762962 7.986664,7.834511 7.53125,12.625c-0.03479,0.362747 0.589233,2.891006 1.125,3.53125c4.344635,5.191872 5.822723,7.468742 11.6875,7.46875c11.729614,0 18.3125,-5.93206 18.3125,-17.8125c0,-11.880463 -10.832916,-21.25 -22.5625,-21.25zm-11.875,8.1875c0.986481,0.058029 2.139893,0.464394 3.21875,1.1875c2.157715,1.44622 3.225708,3.668251 2.375,4.9375c-0.850739,1.269257 -3.311005,1.10247 -5.46875,-0.34375c-2.157745,-1.446228 -3.194458,-3.637001 -2.34375,-4.90625c0.425354,-0.634628 1.232269,-0.933029 2.21875,-0.875z" id="path6822"/> + <path fill="#ff7a00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6824" d="m392.586761,76.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#95d300" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6826" d="m402.524292,81.553246a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#00a6e4" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6828" d="m408.461792,90.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#f9de00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6830" d="m403.643463,99.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#e600ad" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6832" d="m393.518463,100.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/browser/themes/osx/jar.mn b/browser/themes/osx/jar.mn index 8295008..de119b1 100644 --- a/browser/themes/osx/jar.mn +++ b/browser/themes/osx/jar.mn @@ -329,6 +329,7 @@ browser.jar: skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon(a)2x.png (tabbrowser/alltabs-box-bkgnd-icon-lion(a)2x.png) skin/classic/browser/lion/tabview/tabview.png (tabview/tabview-lion.png) skin/classic/browser/lion/places/toolbar.png (places/toolbar-lion.png) + skin/classic/browser/canvas-popup.svg skin/classic/browser/webapps-16.png skin/classic/browser/webapps-16(a)2x.png skin/classic/browser/webapps-64.png diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css index edb064c..7012c41 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -2449,7 +2449,10 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] { -moz-image-region: rect(32px, 32px, 48px, 16px); } -.popup-notification-icon[popupid="canvas-permissions-prompt"], +.popup-notification-icon[popupid="canvas-permissions-prompt"] { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .popup-notification-icon[popupid="indexedDB-permissions-prompt"], .popup-notification-icon[popupid="indexedDB-quota-prompt"], .popup-notification-icon[popupid*="offline-app-requested"], @@ -2531,7 +2534,10 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] { list-style-image: url(chrome://mozapps/skin/extensions/extensionGeneric-16.png); } -#canvas-notification-icon, +#canvas-notification-icon { + list-style-image: url(chrome://browser/skin/canvas-popup.svg); +} + .indexedDB-notification-icon, #indexedDB-notification-icon { list-style-image: url(chrome://global/skin/icons/question-16.png); diff --git a/browser/themes/windows/canvas-popup.svg b/browser/themes/windows/canvas-popup.svg new file mode 100644 index 0000000..f99eac3 --- /dev/null +++ b/browser/themes/windows/canvas-popup.svg @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"> + + <metadata>image/svg+xmlOpen Clip Art Librarypalette2009-02-17T21:15:25http://openclipart.org/detail/21620/palett… artclipartcolorcoloriconiconimagemediapaintpaintpalettepalettepngpublic domainsvg</metadata> + <g> + <title>Layer 1</title> + <g id="layer1"> + <rect fill="#000000" stroke-width="2" stroke-miterlimit="4" stroke-dashoffset="0" ry="23.587006" rx="26.785715" y="0" x="0" height="200" width="200" id="rect6786"/> + <g transform="matrix(4.65116, 0, 0, 4.65116, -1717.85, -314.201)" id="g6820"> + <path fill="#ffffff" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" d="m388.618042,70.128563c-4.746887,0 -18.367279,0.849472 -18.34375,12.3125c0.001312,0.644249 1.226776,2.886879 2.25,3.125c7.5755,1.762962 7.986664,7.834511 7.53125,12.625c-0.03479,0.362747 0.589233,2.891006 1.125,3.53125c4.344635,5.191872 5.822723,7.468742 11.6875,7.46875c11.729614,0 18.3125,-5.93206 18.3125,-17.8125c0,-11.880463 -10.832916,-21.25 -22.5625,-21.25zm-11.875,8.1875c0.986481,0.058029 2.139893,0.464394 3.21875,1.1875c2.157715,1.44622 3.225708,3.668251 2.375,4.9375c-0.850739,1.269257 -3.311005,1.10247 -5.46875,-0.34375c-2.157745,-1.446228 -3.194458,-3.637001 -2.34375,-4.90625c0.425354,-0.634628 1.232269,-0.933029 2.21875,-0.875z" id="path6822"/> + <path fill="#ff7a00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6824" d="m392.586761,76.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#95d300" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6826" d="m402.524292,81.553246a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#00a6e4" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6828" d="m408.461792,90.615746a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#f9de00" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6830" d="m403.643463,99.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + <path fill="#e600ad" stroke-width="1.924773" stroke-miterlimit="4" stroke-dasharray="3.84954572, 3.84954572" stroke-dashoffset="3.657068" id="path6832" d="m393.518463,100.60791a3.5,3.5 0 1 1 -7,0a3.5,3.5 0 1 1 7,0z"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/browser/themes/windows/jar.mn b/browser/themes/windows/jar.mn index eff2220..b9cf33a 100644 --- a/browser/themes/windows/jar.mn +++ b/browser/themes/windows/jar.mn @@ -69,6 +69,7 @@ browser.jar: skin/classic/browser/urlbar-arrow.png skin/classic/browser/urlbar-popup-blocked.png skin/classic/browser/urlbar-history-dropmarker.png + skin/classic/browser/canvas-popup.svg skin/classic/browser/webapps-16.png skin/classic/browser/webapps-64.png skin/classic/browser/notification-pluginNormal.png (../shared/plugins/notification-pluginNormal.png)
1 0
0 0
[tor-browser/tor-browser-24.7.0esr-4.x-2] fixup! Bug #5742: API allows you to get the url bar URI for a channel or nsIDocument.
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit 1229eaa018c10b6503a2f47c986236eee21b6b98 Author: Mike Perry <mikeperry-git(a)torproject.org> Date: Sat Aug 16 19:25:57 2014 -0700 fixup! Bug #5742: API allows you to get the url bar URI for a channel or nsIDocument. Log the URI of the source doc/channel that failed. --- content/base/src/ThirdPartyUtil.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/content/base/src/ThirdPartyUtil.cpp b/content/base/src/ThirdPartyUtil.cpp index 06b2a14..7d70b20 100644 --- a/content/base/src/ThirdPartyUtil.cpp +++ b/content/base/src/ThirdPartyUtil.cpp @@ -461,6 +461,7 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel, nsIURI **aOutput) { nsresult rv = NS_ERROR_NULL_POINTER; + nsCOMPtr<nsIURI> srcURI; if (!aOutput) return rv; @@ -475,6 +476,7 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel, // for sure if (aChannel) { rv = GetOriginatingURI(aChannel, aOutput); + aChannel->GetURI(getter_AddRefs(srcURI)); if (NS_SUCCEEDED(rv) && *aOutput) { // At this point, about: and chrome: URLs have been mapped to file: or // jar: URLs. Try to recover the original URL. @@ -501,6 +503,7 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel, nsCOMPtr<nsIDOMWindow> top; nsCOMPtr<nsIDOMDocument> topDDoc; nsIURI *docURI = nullptr; + srcURI = aDoc->GetDocumentURI(); if (aDoc->GetWindow()) { aDoc->GetWindow()->GetTop(getter_AddRefs(top)); @@ -539,14 +542,19 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel, (do_GetService(NS_CONSOLESERVICE_CONTRACTID)); if (console) { nsCString spec; + nsCString srcSpec("unknown"); + + if (srcURI) + srcURI->GetSpec(srcSpec); + if (*aOutput) (*aOutput)->GetSpec(spec); if (spec.Length() > 0) { - nsPrintfCString msg("getFirstPartyURI: no host in first party URI %s", - spec.get()); // TODO: L10N + nsPrintfCString msg("getFirstPartyURI failed for %s: no host in first party URI %s", + srcSpec.get(), spec.get()); // TODO: L10N console->LogStringMessage(NS_ConvertUTF8toUTF16(msg).get()); } else { - nsPrintfCString msg("getFirstPartyURI failed: 0x%x", rv); + nsPrintfCString msg("getFirstPartyURI failed for %s: 0x%x", srcSpec.get(), rv); console->LogStringMessage(NS_ConvertUTF8toUTF16(msg).get()); } }
1 0
0 0
[tor-browser/tor-browser-24.7.0esr-4.x-2] fixup! Bug #2874. Remove the Components shim introduced by Mozilla Bug #790732.
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit b81169268271e65b897e4df2a1f58dd2718af1c7 Author: Arthur Edelstein <arthuredelstein(a)gmail.com> Date: Tue Aug 12 15:14:39 2014 -0700 fixup! Bug #2874. Remove the Components shim introduced by Mozilla Bug #790732. Includes a regression test to ensure the window.Components object is not exposed to untrusted content. --- dom/base/nsDOMClassInfo.cpp | 98 -------------------- js/xpconnect/tests/mochitest/Makefile.in | 3 +- js/xpconnect/tests/mochitest/file_bug790732.html | 56 ----------- js/xpconnect/tests/mochitest/test_bug790732.html | 46 --------- js/xpconnect/tests/mochitest/test_tor_bug2874.html | 25 +++++ toolkit/components/telemetry/Histograms.json | 4 - 6 files changed, 26 insertions(+), 206 deletions(-) diff --git a/dom/base/nsDOMClassInfo.cpp b/dom/base/nsDOMClassInfo.cpp index e5fcebf..2a9d5a8 100644 --- a/dom/base/nsDOMClassInfo.cpp +++ b/dom/base/nsDOMClassInfo.cpp @@ -4282,98 +4282,6 @@ LocationSetterUnwrapper(JSContext *cx, JS::Handle<JSObject*> obj_, JS::Handle<js return LocationSetter<nsIDOMWindow>(cx, obj, id, strict, vp); } -struct InterfaceShimEntry { - const char *geckoName; - const char *domName; -}; - -// We add shims from Components.interfaces.nsIDOMFoo to window.Foo for each -// interface that has interface constants that sites might be getting off -// of Ci. -const InterfaceShimEntry kInterfaceShimMap[] = -{ { "nsIDOMFileReader", "FileReader" }, - { "nsIXMLHttpRequest", "XMLHttpRequest" }, - { "nsIDOMDOMException", "DOMException" }, - { "nsIDOMNode", "Node" }, - { "nsIDOMUserDataHandler", "UserDataHandler" }, - { "nsIDOMCSSPrimitiveValue", "CSSPrimitiveValue" }, - { "nsIDOMCSSRule", "CSSRule" }, - { "nsIDOMCSSValue", "CSSValue" }, - { "nsIDOMEvent", "Event" }, - { "nsIDOMNSEvent", "Event" }, - { "nsIDOMKeyEvent", "KeyEvent" }, - { "nsIDOMMouseEvent", "MouseEvent" }, - { "nsIDOMMouseScrollEvent", "MouseScrollEvent" }, - { "nsIDOMMutationEvent", "MutationEvent" }, - { "nsIDOMSimpleGestureEvent", "SimpleGestureEvent" }, - { "nsIDOMUIEvent", "UIEvent" }, - { "nsIDOMGeoPositionError", "GeoPositionError" }, - { "nsIDOMHTMLMediaElement", "HTMLMediaElement" }, - { "nsIDOMMediaError", "MediaError" }, - { "nsIDOMLoadStatus", "LoadStatus" }, - { "nsIDOMOfflineResourceList", "OfflineResourceList" }, - { "nsIDOMRange", "Range" }, - { "nsIDOMSVGFETurbulenceElement", "SVGFETurbulenceElement" }, - { "nsIDOMSVGFEMorphologyElement", "SVGFEMorphologyElement" }, - { "nsIDOMSVGFEConvolveMatrixElement", "SVGFEConvolveMatrixElement" }, - { "nsIDOMSVGFEDisplacementMapElement", "SVGFEDisplacementMapElement" }, - { "nsIDOMSVGLength", "SVGLength" }, - { "nsIDOMSVGUnitTypes", "SVGUnitTypes" }, - { "nsIDOMNodeFilter", "NodeFilter" }, - { "nsIDOMXPathNamespace", "XPathNamespace" }, - { "nsIDOMXPathResult", "XPathResult" }, - { "nsIDOMXULButtonElement", "XULButtonElement" }, - { "nsIDOMXULCheckboxElement", "XULCheckboxElement" }, - { "nsIDOMXULPopupElement", "XULPopupElement" } }; - -static nsresult -DefineComponentsShim(JSContext *cx, JS::HandleObject global) -{ - // Keep track of how often this happens. - Telemetry::Accumulate(Telemetry::COMPONENTS_SHIM_ACCESSED_BY_CONTENT, true); - - // Create a fake Components object. - JS::Rooted<JSObject*> components(cx, JS_NewObject(cx, nullptr, nullptr, global)); - NS_ENSURE_TRUE(components, NS_ERROR_OUT_OF_MEMORY); - bool ok = JS_DefineProperty(cx, global, "Components", JS::ObjectValue(*components), - JS_PropertyStub, JS_StrictPropertyStub, JSPROP_ENUMERATE); - NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY); - - // Create a fake interfaces object. - JS::Rooted<JSObject*> interfaces(cx, JS_NewObject(cx, nullptr, nullptr, global)); - NS_ENSURE_TRUE(interfaces, NS_ERROR_OUT_OF_MEMORY); - ok = JS_DefineProperty(cx, components, "interfaces", JS::ObjectValue(*interfaces), - JS_PropertyStub, JS_StrictPropertyStub, - JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); - NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY); - - // Define a bunch of shims from the Ci.nsIDOMFoo to window.Foo for DOM - // interfaces with constants. - for (uint32_t i = 0; i < ArrayLength(kInterfaceShimMap); ++i) { - - // Grab the names from the table. - const char *geckoName = kInterfaceShimMap[i].geckoName; - const char *domName = kInterfaceShimMap[i].domName; - - // Look up the appopriate interface object on the global. - JS::Rooted<JS::Value> v(cx, JS::UndefinedValue()); - ok = JS_GetProperty(cx, global, domName, v.address()); - NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY); - if (!v.isObject()) { - NS_WARNING("Unable to find interface object on global"); - continue; - } - - // Define the shim on the interfaces object. - ok = JS_DefineProperty(cx, interfaces, geckoName, v, - JS_PropertyStub, JS_StrictPropertyStub, - JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); - NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY); - } - - return NS_OK; -} - NS_IMETHODIMP nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx, JSObject *obj_, jsid id_, uint32_t flags, @@ -4386,12 +4294,6 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx, return NS_OK; } - MOZ_ASSERT(*_retval == true); // guaranteed by XPC_WN_Helper_NewResolve - if (id == XPCJSRuntime::Get()->GetStringID(XPCJSRuntime::IDX_COMPONENTS)) { - *objp = obj; - return DefineComponentsShim(cx, obj); - } - nsGlobalWindow *win = nsGlobalWindow::FromWrapper(wrapper); MOZ_ASSERT(win->IsInnerWindow()); diff --git a/js/xpconnect/tests/mochitest/Makefile.in b/js/xpconnect/tests/mochitest/Makefile.in index e3e1b63..666d1e2 100644 --- a/js/xpconnect/tests/mochitest/Makefile.in +++ b/js/xpconnect/tests/mochitest/Makefile.in @@ -80,8 +80,6 @@ MOCHITEST_FILES = chrome_wrappers_helper.html \ file_bug781476.html \ test_bug785096.html \ test_bug789713.html \ - test_bug790732.html \ - file_bug790732.html \ test_bug793969.html \ file_bug795275.html \ file_bug795275.xml \ @@ -101,6 +99,7 @@ MOCHITEST_FILES = chrome_wrappers_helper.html \ test_crosscompartment_weakmap.html \ test_asmjs.html \ file_asmjs.js \ + test_tor_bug2874.html \ $(NULL) include $(topsrcdir)/config/rules.mk diff --git a/js/xpconnect/tests/mochitest/file_bug790732.html b/js/xpconnect/tests/mochitest/file_bug790732.html deleted file mode 100644 index 5515dfc..0000000 --- a/js/xpconnect/tests/mochitest/file_bug790732.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script> -function testShim() { - - // Basic stuff - ok(Components, "Components shim exists!"); - var Ci = Components.interfaces; - ok(Ci, "interfaces shim exists!"); - is(typeof Components.classes, 'undefined', "Shouldn't have a Cc"); - - // Check each interface that we shim. We start by checking specific - // constants for a couple of interfaces, and then once it's pretty clear that - // it's working as intended we just check that the objects themselves are the - // same. - is(Ci.nsIDOMFileReader.DONE, FileReader.DONE); - is(Ci.nsIXMLHttpRequest.HEADERS_RECEIVED, XMLHttpRequest.HEADERS_RECEIVED); - is(Ci.nsIDOMDOMException.DATA_CLONE_ERR, DOMException.DATA_CLONE_ERR); - is(Ci.nsIDOMNode.DOCUMENT_NODE, Node.DOCUMENT_NODE); - is(Ci.nsIDOMUserDataHandler.NODE_CLONED, UserDataHandler.NODE_CLONED); - is(Ci.nsIDOMCSSPrimitiveValue.CSS_PX, CSSPrimitiveValue.CSS_PX); - is(Ci.nsIDOMCSSRule.NAMESPACE_RULE, CSSRule.NAMESPACE_RULE); - is(Ci.nsIDOMCSSValue.CSS_PRIMITIVE_VALUE, CSSValue.CSS_PRIMITIVE_VALUE); - is(Ci.nsIDOMEvent.FOCUS, Event.FOCUS); - is(Ci.nsIDOMNSEvent.CLICK, Event.CLICK); - is(Ci.nsIDOMKeyEvent, KeyEvent); - is(Ci.nsIDOMMouseEvent, MouseEvent); - is(Ci.nsIDOMMouseScrollEvent, MouseScrollEvent); - is(Ci.nsIDOMMutationEvent, MutationEvent); - is(Ci.nsIDOMSimpleGestureEvent, SimpleGestureEvent); - is(Ci.nsIDOMUIEvent, UIEvent); - is(Ci.nsIDOMGeoPositionError, GeoPositionError); - is(Ci.nsIDOMHTMLMediaElement, HTMLMediaElement); - is(Ci.nsIDOMMediaError, MediaError); - is(Ci.nsIDOMLoadStatus, LoadStatus); - is(Ci.nsIDOMOfflineResourceList, OfflineResourceList); - is(Ci.nsIDOMRange, Range); - is(Ci.nsIDOMSVGFETurbulenceElement, SVGFETurbulenceElement); - is(Ci.nsIDOMSVGFEMorphologyElement, SVGFEMorphologyElement); - is(Ci.nsIDOMSVGFEConvolveMatrixElement, SVGFEConvolveMatrixElement); - is(Ci.nsIDOMSVGFEDisplacementMapElement, SVGFEDisplacementMapElement); - is(Ci.nsIDOMSVGLength, SVGLength); - is(Ci.nsIDOMSVGUnitTypes, SVGUnitTypes); - is(Ci.nsIDOMNodeFilter, NodeFilter); - is(Ci.nsIDOMXPathNamespace, XPathNamespace); - is(Ci.nsIDOMXPathResult, XPathResult); - is(Ci.nsIDOMXULButtonElement, XULButtonElement); - is(Ci.nsIDOMXULCheckboxElement, XULCheckboxElement); - is(Ci.nsIDOMXULPopupElement, XULPopupElement); -} -</script> -</head> -<body> -</body> -</html> diff --git a/js/xpconnect/tests/mochitest/test_bug790732.html b/js/xpconnect/tests/mochitest/test_bug790732.html deleted file mode 100644 index 771950e..0000000 --- a/js/xpconnect/tests/mochitest/test_bug790732.html +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE HTML> -<html> -<!-- -https://bugzilla.mozilla.org/show_bug.cgi?id=790732 ---> -<head> - <meta charset="utf-8"> - <title>Test for Bug 790732</title> - <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> - <script type="application/javascript"> - - /** Test for the Components shim. We split into two files because this stuff - is currently pref-controlled. **/ - SimpleTest.waitForExplicitFinish(); - - function prepare() { - SpecialPowers.pushPrefEnv({set: [['dom.omit_components_in_content', true]]}, - function () { $('ifr').onload = go; - $('ifr').contentWindow.location = - '/tests/js/xpconnect/tests/mochitest/file_bug790732.html'; } - ); - } - - function go() { - ok(true, "Started test"); - var iwin = $('ifr').contentWindow; - iwin.ok = ok; - iwin.is = is; - iwin.testShim(); - SimpleTest.finish(); - } - - </script> -</head> -<body onload="prepare()"> -<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=790732">Mozilla Bug 790732</a> -<p id="display"></p> -<div id="content" style="display: none"> - -</div> -<pre id="test"> -</pre> -<iframe id="ifr"></iframe> -</body> -</html> diff --git a/js/xpconnect/tests/mochitest/test_tor_bug2874.html b/js/xpconnect/tests/mochitest/test_tor_bug2874.html new file mode 100644 index 0000000..c0a956e --- /dev/null +++ b/js/xpconnect/tests/mochitest/test_tor_bug2874.html @@ -0,0 +1,25 @@ +<!DOCTYPE HTML> +<html> +<!-- +Tor bug +https://trac.torproject.org/projects/tor/ticket/2874 +--> +<head> + <meta charset="utf-8"> + <title>Test for Tor Bug 2874</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + <script type="application/javascript"> + is(typeof Components, 'undefined', "The global window object should not expose a Components property to untrusted content."); + </script> +</head> +<body> +<a target="_blank" href="https://trac.torproject.org/projects/tor/ticket/2874">Tor Bug 2874</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +</pre> +</body> +</html> diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index 9698fac..5594e01 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -2955,10 +2955,6 @@ "kind": "flag", "description": "Whether content ever accesed Components.interfaces in this session" }, - "COMPONENTS_SHIM_ACCESSED_BY_CONTENT": { - "kind": "flag", - "description": "Whether content ever accesed the Components shim in this session" - }, "CHECK_ADDONS_MODIFIED_MS": { "kind": "exponential", "high": "5000",
1 0
0 0
[tor-browser/tor-browser-24.7.0esr-4.x-2] fixup! Bug #6253: Add canvas image extraction prompt.
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit b899b56326e9f1a48c40a2d233138612a975eeac Author: Isis Lovecruft <isis(a)torproject.org> Date: Sun Aug 17 01:31:03 2014 +0000 fixup! Bug #6253: Add canvas image extraction prompt. Modify Pearl Crescent's #7265 patch to log all HTML5 canvas access attempts. --- content/canvas/src/CanvasUtils.cpp | 42 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/content/canvas/src/CanvasUtils.cpp b/content/canvas/src/CanvasUtils.cpp index 203dd92..f2f4536 100644 --- a/content/canvas/src/CanvasUtils.cpp +++ b/content/canvas/src/CanvasUtils.cpp @@ -33,6 +33,8 @@ using namespace mozilla::gfx; #include "mozIThirdPartyUtil.h" #include "nsContentUtils.h" #include "nsUnicharUtils.h" +#include "nsPrintfCString.h" +#include "nsIConsoleService.h" #define TOPIC_CANVAS_PERMISSIONS_PROMPT "canvas-permissions-prompt" #define PERMISSION_CANVAS_EXTRACT_DATA "canvas/extractData" @@ -79,14 +81,40 @@ IsImageExtractionAllowed(nsIDocument *aDocument) isAllowed = (permission == nsIPermissionManager::ALLOW_ACTION); if (!isAllowed && (permission != nsIPermissionManager::DENY_ACTION)) { - // Send notification so that a prompt is displayed. - nsCString spec; - rv = uri->GetSpec(spec); + // Log all attempted canvas access and block access by third parties. + bool isThirdParty = true; + nsIURI *docURI = aDocument->GetDocumentURI(); + rv = thirdPartyUtil->IsThirdPartyURI(uri, docURI, &isThirdParty); + NS_ENSURE_SUCCESS(rv, false); + + nsCString firstPartySpec; + rv = uri->GetSpec(firstPartySpec); + nsCString docSpec; + docURI->GetSpec(docSpec); + nsPrintfCString msg("On %s: blocked access to canvas image data" + " from %s ", // L10n + firstPartySpec.get(), docSpec.get()); + + nsCOMPtr<nsIConsoleService> console + (do_GetService(NS_CONSOLESERVICE_CONTRACTID)); + if (console) + console->LogStringMessage(NS_ConvertUTF8toUTF16(msg).get()); + + // Log every canvas access attempt to stdout if debugging: +#ifdef DEBUG + printf("%s\n", msg.get()); +#endif + // Ensure URI is valid after logging, but before trying to notify the + // user: NS_ENSURE_SUCCESS(rv, false); - nsCOMPtr<nsIObserverService> obs = - mozilla::services::GetObserverService(); - obs->NotifyObservers(win, TOPIC_CANVAS_PERMISSIONS_PROMPT, - NS_ConvertUTF8toUTF16(spec).get()); + + if (!isThirdParty) { + // Send notification so that a prompt is displayed. + nsCOMPtr<nsIObserverService> obs = + mozilla::services::GetObserverService(); + obs->NotifyObservers(win, TOPIC_CANVAS_PERMISSIONS_PROMPT, + NS_ConvertUTF8toUTF16(firstPartySpec).get()); + } } } }
1 0
0 0
[tor-browser/tor-browser-24.7.0esr-4.x-2] fixup! Bug #6253: Add canvas image extraction prompt.
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit 3ef809fcfc22b0d46a52a3393cc685f44b66180e Author: Mike Perry <mikeperry-git(a)torproject.org> Date: Tue Aug 19 20:34:23 2014 -0700 fixup! Bug #6253: Add canvas image extraction prompt. Use JSContext to get URL information for HTML5 canvas access. --- content/canvas/src/CanvasRenderingContext2D.cpp | 2 +- content/canvas/src/CanvasUtils.cpp | 18 +++++++++++++----- content/canvas/src/CanvasUtils.h | 2 +- content/html/content/src/HTMLCanvasElement.cpp | 9 +++++---- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/content/canvas/src/CanvasRenderingContext2D.cpp b/content/canvas/src/CanvasRenderingContext2D.cpp index 9be4ced..c53ac07 100644 --- a/content/canvas/src/CanvasRenderingContext2D.cpp +++ b/content/canvas/src/CanvasRenderingContext2D.cpp @@ -3506,7 +3506,7 @@ CanvasRenderingContext2D::GetImageDataArray(JSContext* aCx, if (mCanvasElement) { nsCOMPtr<nsIDocument> ownerDoc = mCanvasElement->OwnerDoc(); usePlaceholder = !ownerDoc || - !CanvasUtils::IsImageExtractionAllowed(ownerDoc); + !CanvasUtils::IsImageExtractionAllowed(ownerDoc, aCx); } if (usePlaceholder) { diff --git a/content/canvas/src/CanvasUtils.cpp b/content/canvas/src/CanvasUtils.cpp index f2f4536..591650a 100644 --- a/content/canvas/src/CanvasUtils.cpp +++ b/content/canvas/src/CanvasUtils.cpp @@ -35,6 +35,7 @@ using namespace mozilla::gfx; #include "nsUnicharUtils.h" #include "nsPrintfCString.h" #include "nsIConsoleService.h" +#include "jsdbgapi.h" #define TOPIC_CANVAS_PERMISSIONS_PROMPT "canvas-permissions-prompt" #define PERMISSION_CANVAS_EXTRACT_DATA "canvas/extractData" @@ -43,10 +44,9 @@ namespace mozilla { namespace CanvasUtils { // Check site-specific permission and display prompt if appropriate. -bool -IsImageExtractionAllowed(nsIDocument *aDocument) +bool IsImageExtractionAllowed(nsIDocument *aDocument, JSContext *aCx) { - if (!aDocument) + if (!aDocument || !aCx) return false; nsPIDOMWindow *win = aDocument->GetWindow(); @@ -87,13 +87,21 @@ IsImageExtractionAllowed(nsIDocument *aDocument) rv = thirdPartyUtil->IsThirdPartyURI(uri, docURI, &isThirdParty); NS_ENSURE_SUCCESS(rv, false); + nsCString scriptFile("unknown"); + unsigned scriptLine = 0; + JSScript *script; + if (JS_DescribeScriptedCaller(aCx, &script, &scriptLine)) { + scriptFile = JS_GetScriptFilename(aCx, script); + } + nsCString firstPartySpec; rv = uri->GetSpec(firstPartySpec); nsCString docSpec; docURI->GetSpec(docSpec); nsPrintfCString msg("On %s: blocked access to canvas image data" - " from %s ", // L10n - firstPartySpec.get(), docSpec.get()); + " from document %s, script from %s:%u ", // L10n + firstPartySpec.get(), docSpec.get(), + scriptFile.get(), scriptLine); nsCOMPtr<nsIConsoleService> console (do_GetService(NS_CONSOLESERVICE_CONTRACTID)); diff --git a/content/canvas/src/CanvasUtils.h b/content/canvas/src/CanvasUtils.h index d7aae4d..1e7f726 100644 --- a/content/canvas/src/CanvasUtils.h +++ b/content/canvas/src/CanvasUtils.h @@ -45,7 +45,7 @@ void DoDrawImageSecurityCheck(dom::HTMLCanvasElement *aCanvasElement, bool forceWriteOnly, bool CORSUsed); -bool IsImageExtractionAllowed(nsIDocument *aDocument); +bool IsImageExtractionAllowed(nsIDocument *aDocument, JSContext *aCx); // Make a double out of |v|, treating undefined values as 0.0 (for // the sake of sparse arrays). Return true iff coercion diff --git a/content/html/content/src/HTMLCanvasElement.cpp b/content/html/content/src/HTMLCanvasElement.cpp index e229e1c..d6cb88a 100644 --- a/content/html/content/src/HTMLCanvasElement.cpp +++ b/content/html/content/src/HTMLCanvasElement.cpp @@ -355,7 +355,7 @@ HTMLCanvasElement::ToDataURL(const nsAString& aType, const JS::Value& aParams, // Check site-specific permission and display prompt if appropriate. // If no permission, return all-white, opaque image data. - bool usePlaceholder = !CanvasUtils::IsImageExtractionAllowed(OwnerDoc()); + bool usePlaceholder = !CanvasUtils::IsImageExtractionAllowed(OwnerDoc(), aCx); return ToDataURLImpl(aCx, aType, aParams, usePlaceholder, aDataURL); } @@ -590,10 +590,11 @@ HTMLCanvasElement::ToBlob(nsIFileCallback* aCallback, } bool fallbackToPNG = false; + JSContext* cx = nsContentUtils::GetCurrentJSContext(); // Check site-specific permission and display prompt if appropriate. // If no permission, return all-white, opaque image data. - bool usePlaceholder = !CanvasUtils::IsImageExtractionAllowed(OwnerDoc()); + bool usePlaceholder = !CanvasUtils::IsImageExtractionAllowed(OwnerDoc(), cx); nsCOMPtr<nsIInputStream> stream; rv = ExtractData(type, EmptyString(), usePlaceholder, getter_AddRefs(stream), fallbackToPNG); @@ -616,7 +617,6 @@ HTMLCanvasElement::ToBlob(nsIFileCallback* aCallback, nsRefPtr<nsDOMMemoryFile> blob = new nsDOMMemoryFile(imgData, imgSize, type); - JSContext* cx = nsContentUtils::GetCurrentJSContext(); if (cx) { JS_updateMallocCounter(cx, imgSize); } @@ -648,7 +648,8 @@ HTMLCanvasElement::MozGetAsFile(const nsAString& aName, // Check site-speciifc permission and display prompt if appropriate. // If no permission, return all-white, opaque image data. - bool usePlaceholder = !CanvasUtils::IsImageExtractionAllowed(OwnerDoc()); + bool usePlaceholder = !CanvasUtils::IsImageExtractionAllowed(OwnerDoc(), + nsContentUtils::GetCurrentJSContext()); return MozGetAsFileImpl(aName, aType, usePlaceholder, aResult); }
1 0
0 0
[torbutton/master] Merge remote-tracking branch 'isis/bug12684-additional-canvas-ui-strings_squashed'
by mikeperry@torproject.org 20 Aug '14

20 Aug '14
commit d09b8425899cf838e0f0b86fffee248cf2be63b5 Merge: b6e98c0 b0d3f18 Author: Mike Perry <mikeperry-git(a)torproject.org> Date: Tue Aug 19 20:46:15 2014 -0700 Merge remote-tracking branch 'isis/bug12684-additional-canvas-ui-strings_squashed' src/chrome/locale/en/torbutton.properties | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.