Git Product home page Git Product logo

private_tab's Introduction

Works only in Gecko 20.0 and higher because used API doesn't exist in older versions!

WebExtensions and compatibility with Firefox 57+

Issue #254 + Private Tab WE repository

Known issues:

  • We just inherit private state from selected tab and tries preserve private state of dropped link-like things, this is simple to implement, but may confuse a bit…
  • If you use "New Private Tab" + "New Tab" buttons after tabs toolbar, you need to manually remove "New Private Tab" button before disabling or uninstalling Private Tab. Or you can remove "New Tab" button, press OK in Customize Toolbar dialog and then place "New Tab" directly after tabs.
  • Can't open new private tab, if installed Scriptify-based extension: please use Greasemonkey or Scriptish instead (#110).
  • In Firefox 52+ private:… URI may be opened only in new tab due to fix for bug 1318388 (#251).

Styles:

You can use .tabbrowser-tab[privateTab-isPrivate] (private tab), #main-window[privateTab-selectedTabIsPrivate] (selected tab is private) and #main-window[privateTab-isPrivate] (built-in private window) selectors in styles for userChrome.css/Stylish.
Example styles:

Options

See extensions.privateTab.* preferences in about:config page, some descriptions can be found in defaults/preferences/prefs.js.

  • extensions.privateTab.sendRefererHeader
    0 – don't send HTTP referer when URI is opened in new private tab
    1 – send only if private tab opened from another private tab
    2 – always send (as Firefox itself do for “Open Link in New Private Window”)

  • extensions.privateTab.usePrivateWindowStyle
    true – use style of private window, if current tab is private
    false – only show private state of window (regardless of current tab private state)

Keyboard shortcuts:

You can modify keyboard shortcuts through about:config page, see notes about extensions.privateTab.key.* preferences in defaults/preferences/prefs.js.

Troubleshooting:

Try new clean Firefox profile to ensure that there are no conflicts with another extensions or some specific configuration.

Debug logs:

Options in about:config:

  • extensions.privateTab.debug – enable debug logs
  • extensions.privateTab.debug.verbose – additionally enable detailed debug logs (not needed in most cases)

Then use Browser Console (formerly Error Console, Ctrl+Shift+J) to see messages like [Private Tab] ….

API for other extensions:

Events:

You can listen for following events:

event.type event.target event.detail Description
PrivateTab:PrivateChanged tab 1 – private tab
0 – not private
Changed private state of the tab
event.explicitOriginalTarget – initial tab in case of toggling using duplication (Firefox 51+, Private Tab 0.2.1.3+)
PrivateTab:OpenInNewTab tab 1 – may be opened as child tab Link was opened in new private tab
PrivateTab:OpenNewTab tab 1 – opened using middle-click
(or left-click with any modifier)
Opened new (empty) private tab
API functions:

boolean privateTab.isTabPrivate(in DOMNode tab)
void privateTab.isTabPrivateAsync(in DOMNode tab, in function callback[, in object context])
boolean privateTab.toggleTabPrivate(in DOMNode tab[, in boolean isPrivate])
DOMNode privateTab.duplicateTabAndTogglePrivate(in DOMNode tab[, in boolean isPrivate])
DOMNode privateTab.replaceTabAndTogglePrivate(in DOMNode tab[, in boolean isPrivate[, in function onSuccessCallback]])
void privateTab.readyToOpenTab(in boolean isPrivate)
void privateTab.readyToOpenTabs(in boolean isPrivate)
boolean privateTab.hasClosedTabs
void privateTab.forgetClosedTabs()
boolean privateTab.tabLabelIsEmpty(in string tabLabel[, in boolean isEmpty])

privateTab.isTabPrivate()

Investigates that the tab are private (true) or not (false), example:

// Close all (visible) private tabs:
Array.slice(gBrowser.visibleTabs || gBrowser.tabs).forEach(function(tab) {
	if(privateTab.isTabPrivate(tab))
		gBrowser.removeTab(tab);
});
privateTab.isTabPrivateAsync()

The same as privateTab.isTabPrivate, but get real state of nsILoadContext.usePrivateBrowsing in multi-process mode (Electrolysis aka e10s), Private Tab 0.2.1+.
Not needed in most cases!

// Asynchronously get privacy state of given tab.
// In most cases should be replaced with synchronous privateTab.isTabPrivate()
privateTab.isTabPrivateAsync(gBrowser.selectedTab, function(isPrivate) {
	alert("Selected tab is " + (isPrivate ? "private" : "not private"));
});
privateTab.toggleTabPrivate()

Changes tab private state:
Toggle: privateTab.toggleTabPrivate(tab)
Make private: privateTab.toggleTabPrivate(tab, true)
Make not private: privateTab.toggleTabPrivate(tab, false)

// Make all (visible) tabs private:
Array.forEach(
	gBrowser.visibleTabs || gBrowser.tabs,
	function(tab) {
		if(!privateTab.isTabPrivate(tab))
			privateTab.toggleTabPrivate(tab, true);
	}
);
privateTab.duplicateTabAndTogglePrivate()

Duplicate already opened tab in private or non-private tab.

// Duplicate selected tab and toggle private state of duplicated tab
var tab = gBrowser.selectedTab;
var pos = "_tPos" in tab
	? tab._tPos
	: Array.prototype.indexOf.call(gBrowser.tabs, tab); // SeaMonkey
var dupTab = gBrowser.selectedTab = privateTab.duplicateTabAndTogglePrivate(tab);
gBrowser.moveTabTo(dupTab, pos + 1); // Place right after initial tab
privateTab.replaceTabAndTogglePrivate()

Changes tab private state using tab duplication (for Firefox 52+):

// Duplicate selected tab, toggle private state of duplicated tab and then close initial tab
privateTab.replaceTabAndTogglePrivate(gBrowser.selectedTab);
// The same as above + also load new URL into duplicated tab (Private Tab 0.2.3+)
privateTab.replaceTabAndTogglePrivate(gBrowser.selectedTab, undefined, function onSuccess(dupTab) {
	dupTab.linkedBrowser.loadURI("https://example.com/");
});
privateTab.readyToOpenTab()

Allows to open private or not private tab (independent of any inheritance mechanism), example:

// Open in private tab:
privateTab.readyToOpenTab(true);
gBrowser.addTab("https://mozilla.org/");
// Open in not private tab:
privateTab.readyToOpenTab(false);
gBrowser.addTab("https://mozilla.org/");
privateTab.readyToOpenTabs()

Allows to open many private or not private tabs (independent of any inheritance mechanism), example:

// Open in private tabs:
privateTab.readyToOpenTabs(true);
gBrowser.addTab("https://mozilla.org/");
gBrowser.addTab("https://addons.mozilla.org/");
// ...
privateTab.stopToOpenTabs();
privateTab.hasClosedTabs

Only for extensions.privateTab.rememberClosedPrivateTabs = true, Private Tab 0.1.7.4+.
Return true, if there is at least one private tab in undo close list, example:

if(privateTab.hasClosedTabs)
	alert("We have at least one closed private tabs");
else
	alert("We don't have closed private tabs");
privateTab.forgetClosedTabs()

Only for extensions.privateTab.rememberClosedPrivateTabs = true, Private Tab 0.1.7.4+.
Forget about all closed private tabs in window, example:

// Forget about all closed private tabs in window
privateTab.forgetClosedTabs();
privateTab.tabLabelIsEmpty()

Mark tab label as empty (or non-empty), example:

// Mark tab label/URI as empty:
if("tabLabelIsEmpty" in privateTab) // Private Tab 0.1.7.2+
	privateTab.tabLabelIsEmpty("chrome://speeddial/content/speeddial.xul", true);
// Check state:
var isEmpty = privateTab.tabLabelIsEmpty("chrome://speeddial/content/speeddial.xul");
// Restore state (e.g. for restartless extensions):
privateTab.tabLabelIsEmpty("chrome://speeddial/content/speeddial.xul", false);

Note: used global storage for labels (not per-window)! So, it's enough to call this function only once.

Backward compatibility:

Check for Private Tab installed (and enabled):

if("privateTab" in window) {
	// Do something with "privateTab" object
}
Code examples:

Open link in private tab using FireGestures extension:

// Remember the active tab's position
var tab = gBrowser.selectedTab;
var pos = "_tPos" in tab
	? tab._tPos
	: Array.prototype.indexOf.call(gBrowser.tabs, tab); // SeaMonkey
// Get the DOM node at the starting point of gesture
var srcNode = FireGestures.sourceNode;
// Get the link URL inside the node
var linkURL = FireGestures.getLinkURL(srcNode);
if (!linkURL)
    throw "Not on a link";
// Check the URL is safe
FireGestures.checkURL(linkURL, srcNode.ownerDocument);
// Open link in new private tab
privateTab.readyToOpenTab(true);
var newPrivateTab = gBrowser.addTab(linkURL);
gBrowser.moveTabTo(newPrivateTab, pos + 1); // Place right after initial tab

private_tab's People

Contributors

arbiger avatar charishi avatar cye3s avatar dbv92 avatar dhannynara avatar dimas-sc avatar hellojole avatar ikurrina avatar infocatcher avatar mdr-ksk avatar moretti avatar sierkb avatar spacy01 avatar stis avatar strel avatar sw1ft avatar tahani5 avatar tonnesm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

private_tab's Issues

Enable proxy per private tab/window

Hi,
Can you add a feature to automatically turn on proxy just for private window/tab. The normal tabs/windows would go through regular connection.

Ctrl+Alt+* hotkeys doesn't work on non-English keyboard layouts

Unfortunately this is platform "bug".

Example for Ctrl+Alt+V on Russian keyboard layout:
event.charCode: 1084
String.fromCharCode(event.charCode): м
event.keyCode: 0

So we can 1) change default hotkeys to Ctrl+Shift+* or 2) add ability to create many hotkeys for one action.

Disable thumbnails capturing from private tabs

(from #56 (comment))

See chrome://browser/content/browser.js

let gBrowserThumbnails = {
  ...
  _shouldCapture: function Thumbnails_shouldCapture(aBrowser) {
    // Capture only if it's the currently selected tab.
    if (aBrowser != gBrowser.selectedBrowser)
      return false;

    // Don't capture in per-window private browsing mode.
    if (PrivateBrowsingUtils.isWindowPrivate(window))
      return false;

Some improvements for Arabic (ar) localization

Unfortunately seems I can't get feedback from original translator because his review already removed by AMO editors.

I'm use ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest/win32/xpi/ar.xpi and see that all accesskeys are translated, so we should do the same.
For example, File menu:
Screenshot: File menu

<menuitem
    id="menu_newNavigatorTab"
    label="لسان جديد"
    accesskey="ل"
    acceltext="Ctrl+T" />

(etc.)

And extension description should be translated too (install.rdf):

        <em:localized>
            <Description>
                <em:locale>ar</em:locale>
                <em:name>Private Tab</em:name>
                <em:description>Adds private tabs</em:description>
                <em:creator>Infocatcher</em:creator>
                <em:translator>infinity</em:translator>
            </Description>
        </em:localized>

Conflict with NoSquint 2.1.9

NoSquint has an option called 'Global Settings'. With Private Tabs enabled the 'Global Settings' menu is not fully displayed. Only the OK, Cancel, and Help buttons are shown. Can you have a look into this?

NoSquint: Firefox Extension - https://urandom.ca/nosquint/

Someone else filed a bug report about this problem over at NoSquint:

Private Tab 0.1.1 breaks NoSquint Options · Issue #80 · jtackaberry/nosquint - jtackaberry/nosquint#80

Create german (de) localization

diff -Nur ./Private_tab ./Private_tab-04122013-204600sierkb

diff -Nur ./Private_tab/chrome.manifest ./Private_tab-04122013-204600sierkb/chrome.manifest
--- ./Private_tab/chrome.manifest   2013-04-12 20:46:08.000000000 +0200
+++ ./Private_tab-04122013-204600sierkb/chrome.manifest 2013-04-12 21:46:18.000000000 +0200
@@ -1,7 +1,7 @@

 content privatetab ./
 
+locale privatetab de    locale/de/
 locale privatetab en-US locale/en-US/
-locale privatetab fr    locale/fr/
 locale privatetab ja    locale/ja/
 locale privatetab ru    locale/ru/
 locale privatetab vi    locale/vi/

diff -Nur ./Private_tab/install.rdf ./Private_tab-04122013-204600sierkb/install.rdf
--- ./Private_tab/install.rdf   2013-04-12 20:46:08.000000000 +0200
+++ ./Private_tab-04122013-204600sierkb/install.rdf 2013-04-12 21:49:00.000000000 +0200
@@ -33,6 +33,16 @@
 

        <em:localized>
            <Description>
+               <em:locale>de</em:locale>
+               <em:name>Private Tab</em:name>
+               <em:description>Fügt private Tabs hinzu</em:description>
+               <em:creator>Infocatcher</em:creator>
+               <em:translator>sierkb</em:translator>
+           </Description>
+       </em:localized>
+
+       <em:localized>
+           <Description>
                <em:locale>fr</em:locale>
                <em:name>Private Tab</em:name>
                <em:description>La navigation privée gérée par onglets.</em:description>

Binary files ./Private_tab/locale/.DS_Store and ./Private_tab-04122013-204600sierkb/locale/.DS_Store differ
diff -Nur ./Private_tab/locale/de/pt.properties ./Private_tab-04122013-204600sierkb/locale/de/pt.properties
--- ./Private_tab/locale/de/pt.properties   1970-01-01 01:00:00.000000000 +0100
+++ ./Private_tab-04122013-204600sierkb/locale/de/pt.properties 2013-04-12 21:50:43.000000000 +0200
@@ -0,0 +1,19 @@

+openInNewPrivateTab=Link in neuem privaten Tab öffnen
+openInNewPrivateTabAccesskey=v
+
+openPlacesInNewPrivateTab=Neuer privater Tab
+openPlacesInNewPrivateTabAccesskey=v
+
+privateTab=Privater Tab
+privateTabTip=(Privater Modus)
+privateTabAccesskey=v
+
+openNewPrivateTab=Neuer privater Tab
+openNewPrivateTabTip=Neuen privaten Tab öffnen
+openNewPrivateTabAccesskey=v
+# For SeaMonkey
+openNewPrivateTabShort=Privater Tab
+openNewPrivateTabShortAccesskey=v
+
+# For SeaMonkey, you can just copy Firefox translation
+privateBrowsingTitleModifier=\ (Privater Modus)

Improve compatibility with extensions like Personal Menu

After fix for #3 menu item doesn't exist in App menu until menu are closed.
So Personal Menu (or any similar extension, I think) can't move it to another position.
But we can add menu item as last child on window "load" and set it position (and icon) on "popupshowing".

Known Issue: Inherit PBM

I know that the readme has this listed as a known error, but will the be addressed at some point? It seems very odd that opening another tab from a PBM tab continues the context.

As an example, I will have marked Reddit.com as a private browsing mode tab, then I open a link from that tab in a new tab. I'm on the fence with this one; I've gone to an entirely different domain potentially, so maybe it shouldn't be private. On the other hand, I can see the reasoning behind it being in PBM, so maybe this makes sense.

However, opening a bookmark in a new tab while my reddit.com tab is open an escalated to PBM makes no sense to me at all.

Personally, I think it would make the most sense to have only that tab in PBM as the context is "Private Tab", not "Private Tab... and all subsequent tabs."

empty area right-click bug

Nice job! One of the thing I like in Opera is Private Tab. Glad to see this is possible in Firefox now.

Anyway, I found a bug perhaps...

When you right-click on an empty area on a page, it shows two menu-items, "Open Link in New Tab" and "Open Link in New Window", even though you clearly did not right-click on any link.

Please fix.

Some improvements for Indonesian (id) localization

See https://addons.mozilla.org/addon/private-tab/reviews/491024/
(AMO doesn't support formatting and it's better to track this here)

  1. Translate accesskeys too (just like in Firefox localization):

    File menu

    (and in other menus)
  2. Context menu for links:

    Links context menu

    Something like Buka Tautan di Tab Mode Penjelajahan Pribadi Baru (just like built-in Buka Tautan di Jendela Mode Penjelajahan Pribadi Baru)?

    I don't know Indonesian, but translation should be in line with built-in translation, I think.
  3. Context menu for bookmarks:

    Bookmarks context menu

    Remove Link and uppercase Pribadi word?
  4. Context menu for tabs:

    Tabs context menu

    Uppercase Pribadi word?
  5. Also dialogCloseSingle=Tutup (&C) and dialogClose=Tutup saja (&C) may be changed to just &Tutup (but I don't know about Indonesian keyboard layout).

Single Private Tab in new Window

When you have a single tab set as a private tab in a secondary window, then close said window, the entry still goes into the "recently closed windows" as if it were NOT a private session.

This may not be the focus of your extension directly. I am the author of a Firefox extension called HistoryBlock and someone pointed me to your extension as a means for handling a lot of my private browsing requirements. Your extension handles them all perfectly (opening a new tab, detecting whether it is blacklisted and toggling private tab if so, etc) except for the new window use case:

User opens a link in a new window
Link is blacklisted
History is purged and private tab is toggled on
User closes said window, but the History -> Recently Closed Windows -> [entry] remains.

[SeaMonkey] Large pages may be cached to disk

STR:

  • Clear cache
  • Open large *.html or image in private tab
  • Check cache: *.html (or gzipped *.html) or image appears in disk cache (seems like only "document" will be cached – not embedded images/scripts/etc.)

Unfortunately this looks like bug in built-in private browsing implementation.

Incompatible with InstantFox search preview: private tab becomes not private

Reported here: https://addons.mozilla.org/addon/private-tab/reviews/451236/

There seems to be incompatibility between "PrivateTabs" and "Instantfox" when used with FF20, Private Tabs are randomly dropping to none private browsing mode when information is entered into the URL bar.

I'm not sure which of the addons is causing the issue, but I can reliably recreate it doing the following :

1. On a brand new profile, install Instantfox & PrivateTabs
2. Open a new private tab (either with the "Open in Private Tab" icon or the keyboard shortcut CTRL ALT P)
3. In the private tab that opens, begin a google search using instantfox (so for example "g firefox" in the location bar)
4. Press Enter
5. The Google search opens as usual, but the tab loses "Private Browsing" mode.

This doesn't happen if I am using a Private Browsing window; only a Private Browsing tab will do this.

Call stack (in development version):

before@resource://gre/modules/XPIProvider.jsm -> jar:file:///.../[email protected]!/bootstrap.js:351
wrapper@resource://gre/modules/XPIProvider.jsm -> jar:file:///.../[email protected]!/bootstrap.js:2126
InstantFox.pageLoader.swapBrowsers@chrome://instantfox/content/contentHandler.js:287
InstantFox.pageLoader.persistPreview@chrome://instantfox/content/contentHandler.js:228
window.InstantFox.finishSearch@chrome://instantfox/content/instantfox.js:793
window.InstantFox.onblur@chrome://instantfox/content/instantfox.js:471

So the reason is
InstantFox.pageLoader.swapBrowsers()
=> targetBrowser.swapDocShells(origin);

Then we handle browser.swapDocShells() and inherit private state from source browser (from not private preview in this case).

Implement API for other extensions

  • isTabPrivate(tab)
  • toggleTabPrivate(tab[, isPrivate])
  • readyToOpenTab(isPrivate)
  • readyToOpenTabs(isPrivate)

Usage examples:

// Open in private tab:
privateTab.readyToOpenTab(true);
gBrowser.addTab("https://mozilla.org/");
// Open in not private tab:
privateTab.readyToOpenTab(false);
gBrowser.addTab("https://mozilla.org/");
// Open in private tabs:
privateTab.readyToOpenTabs(true);
gBrowser.addTab("https://mozilla.org/");
gBrowser.addTab("https://addons.mozilla.org/");
// ...
privateTab.stopToOpenTabs();

And easy way to check for Private Tab installed (and enabled):

if("privateTab" in window) {
    // Do something
}

Problem with PT 0.1.3 under Fx25.

I am testing the current nightly which is currently Fx25.0a1. With PT 0.1.3 enabled hovering over a tab produces a small rectangle instead of the description of the tab.

Hovering over a private tab shows a description of (private tab).

Private Tab may break in Firefox 28 (or later?)

Hi,

We are working on a number of optimizations to Session Restore for Firefox 25 (or 26). To perform one major optimization, we will need to get rid of the state string attached to "sessionstore-state-write" that you are currently using.

We need to find a way to ensure that this will not break Private Tab.

I have the feeling that if:

  • we keep sending "sessionstore-state-write" but without a nsISupportsString;
  • we don't save tabs that have attribute usePrivateBrowsing.

This will be sufficient to ensure that your add-on does not break and does not lose features. Could you confirm?

"View Page Source" don´t work

"View Source" shows the page source without a session. If you open two sessions, for example gmail, the source code that corresponds to the tab "not private"

Design problems on Mac OS X

On Mac OS X, there are some little issues:

  • The tabbar gets an odd background color.
  • The icon for surfing in private mode does overlay other tabs.
    icon-overlay

"(private tab)" is unreadable on systems with light-on-dark tooltip themes

I run Lubuntu Linux and, like the main Ubuntu distribution, the default theme uses tooltips with a dark background and white text.

Because you use hyperlink blue for your "(private tab)" text, that means I can barely see that it's there... let alone read it.

It'd be better to use the system-provided colors and just make "(private tab)" stand out by making it bold and possibly underlined.

Catalan translation

openInNewPrivateTab=Obrir enllaç en una nova pestanya privada
openInNewPrivateTabAccesskey=v

openPlacesInNewPrivateTab=Obrir en una nova pestanya privada
openPlacesInNewPrivateTabAccesskey=v

privateTab=Pestanya privada
privateTabTip=(pestanya privada)
privateTabAccesskey=v

openNewPrivateTab=Nova pestanya privada
openNewPrivateTabTip=Obre una nova pestanya privada
openNewPrivateTabAccesskey=v

For SeaMonkey

openNewPrivateTabShort=Pestanya privada
openNewPrivateTabShortAccesskey=v

For SeaMonkey, you can just copy Firefox translation

privateBrowsingTitleModifier=\ (Navegació privada)

Confirmation dialog in case of extension disabling or uninstalling

dialogTitle=Pestanya privada
dialogQuestion=Hi ha %S pestanya(es) privada(es). Què vol fer?
dialogClose=&Tancar-la(es)
dialogRestore=Fer-la(es) &no-privada(es)

Disable the top-left Icon?

Is there a way to disable this programmatically?

I want to hide the fact that a tab is in private browsing mode, but I do not want to alter your addon (I use your addon's api directly from my extension).

EDIT: It would also be nice to have the ability to disable the underlining on a private tab.

Incompatible with Tile Tabs 10.0: tabs opened from private tabs doesn't becomes private

Tile Tabs: https://addons.mozilla.org/firefox/addon/tile-tabs/
(all works fine with Tile Tabs 9.2)

STR:

  1. Open any page in private tab.
  2. Middle-click on any link.
  3. New tab will be opened with "New Tab" label instead of "Connecting…"/"Loading…" (visible only until page title not yet received) and will be not private.

And Private Tab check label of new tabs to detect empty tabs, based on
chrome://browser/content/tabbrowser.xml

      <method name="addTab">
        ...
            var uriIsAboutBlank = !aURI || aURI == "about:blank";

            if (!aURI || isBlankPageURL(aURI))
              t.setAttribute("label", this.mStringBundle.getString("tabs.emptyTabTitle"));
            else
              t.setAttribute("label", aURI);

Also Private Tab works correct without following statements (but tab label still wrong):
chrome\content\tiletabs-browser.js

    onTabOpen: function(event)
    {
        ...
        if (gBrowser.selectedTab.hasAttribute("tiletabs-assigned") && tileTabs.viewTiled)
        {
            tileTabs.hideAllPanels();
            tileTabs.drawActiveLayout();
            tileTabs.highlightPanel();
        }
        else
        {
            tileTabs.hideAllPanels();
            tileTabs.drawSelectedPanel();
        }
        tileTabs.styleTiledTabs();
    },

Anyway, wrong tab label is a Tile Tabs bug and (probably) no possible workaround from Private Tab side.

Add notification if a download is still active

If a download is active and you want to close the last tab in private mode, the download stops without finishing. Is there any possibility to add a notification as in the original private mode?

[REQ] Show hotkeys using tooltips on appmenu

This might be a little nitpicking, but I suggest you should show the hotkey texts using tooltip like what Mozilla does with its appmenu items. Because frankly the way it is now make the appmenu width out of proportion and messy. Please fix?

Documentation?

I realize that this is a simple add-on to use, but is there any documentation at all? For example, I have successfully put a tab INTO private mode, but what if I wish to make it "not private"?

Privacy state of externally opened tabs depends on currently selected tab

If I click a link in Thunderbird or run firefox something.html in my terminal, whether or not it's private depends on which tab is currently selected.

Given that, with a separate private window, externally-opened tabs always appear on the non-private window, it seems more intuitive that the same behaviour be preserved by Private Tab. (Especially since, if it happens unexpectedly, it could leak information by unintentionally granting an arbitrary site access to the cookie store for the private tabs.)

Edit: Looks like this problem used to occur in Firefox without extensions and Private Tab just broke the fix they made for it: https://bugzilla.mozilla.org/show_bug.cgi?id=829180

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.