Closed Bug 1346240 Opened 7 years ago Closed 7 years ago

WebExtensions — Context menu of browser_action: sometimes few first items are inactive

Categories

(WebExtensions :: Untriaged, defect)

53 Branch
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED INVALID

People

(Reporter: vitaliydev, Assigned: zombie)

Details

User Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Build ID: 20170307064827

Steps to reproduce:

Pressed to toolbar button by right mouse button.


Actual results:

2 first items are inactive by some reason.


Expected results:

It should be always active.
Here's screenshot of inactive items in context menu: https://files.tesuto.ru/WebExtensions%20-%20BA%20Context%20Menu%20Bug%202.png

I don't know when it is happening but when I click second time they become always active.
Summary: Context menu of browser_action: sometimes few first items are inactive → WebExtensions — Context menu of browser_action: sometimes few first items are inactive
Component: Untriaged → WebExtensions: Untriaged
Product: Firefox → Toolkit
Can you please attach the extension that's causing this?
It is my own extension but I didn't publushed it yet. I attach it after publishing.

Here is code that adding toolbar buttons:

let curMenuId = undefined;

browser.contextMenus.create({
	title: tree[tree.length - 1],
	contexts: ['browser_action'],
	parentId: curMenuId,
	onclick: info => {
		if (search) {
			zbutton.openSearchOrHome(info.pageUrl, search, home || search, true, false);
		}else{
			zbutton.openHome(home);
		}
	},
});
Also full code of function that adding BA context menu items:

//Init CM: BA_list
this.init_CM_BA_list = function() {
	let a = config.CM_BA_list.replace(/\r\n?/g, '\n').replace(/\n\n\n+/g, '\n\n').trim().split('\n\n');
	let mainMenuChilds = Object.create(null), submenuCounter = 0;
	
	//Parse and add items
	for (let i = 0; i < a.length; i++) {
		if (a[i].match(/^\-+$/)) {
			browser.contextMenus.create({
				type: 'separator',
				contexts: ['browser_action'],
			});
			continue;
		}
		
		let b = a[i].split('\n');
		if (b.length < 2) continue;
		
		//Parse home and search
		let home = null, search = null;
		for (let j = 1; j < b.length; j++) {
			if (b[j].includes('$')) {
				if (!search) search = b[j];
			}else{
				if (!home) home = b[j];
			}
		}
		
		//Parse tree (0..length-2 - menus, length-1 - item; here we go to length-2, i.e. we go to the last menu)
		let tree = b[0].split('>>>');
		let curMenuId = undefined, curMenuChilds = mainMenuChilds;
		for (let j = 0; j < tree.length - 1; j++) {
			let parentMenuId = curMenuId;
			let parentMenuChilds = curMenuChilds;
			
			let curMenuTitle = tree[j].trim();
			let curMenuObj = parentMenuChilds[curMenuTitle];
			
			if (!curMenuObj) {
				curMenuObj = {
					id: 'BA_submenu' + ++submenuCounter,
					childs: Object.create(null),
				};
				browser.contextMenus.create({
					id: curMenuObj.id,
					title: curMenuTitle,
					contexts: ['browser_action'],
					parentId: parentMenuId,
				});
				parentMenuChilds[curMenuTitle] = curMenuObj;
			}
			
			curMenuId = curMenuObj.id;
			curMenuChilds = curMenuObj.childs;
		}
		
		//Add item
		browser.contextMenus.create({
			title: tree[tree.length - 1],
			contexts: ['browser_action'],
			parentId: curMenuId,
			onclick: info => {
				if (search) {
					zbutton.openSearchOrHome(info.pageUrl, search, home || search, true, false);
				}else{
					zbutton.openHome(home);
				}
			},
		});
	}
};
In 90-95% cases all items are active but sometimes few items are inactive (I guess it may happen even if they was active before). After second click they become active.
I was unable to reproduce this on my own.

Can you please attach the full source (a zip file) of a working extension that exhibits the problem? (preferably, a minimal test).
Flags: needinfo?(vitaliydev)
Assignee: nobody → tomica
Status: UNCONFIRMED → ASSIGNED
Ever confirmed: true
Status: ASSIGNED → UNCONFIRMED
Ever confirmed: false
Problem is that I don't know how to reproduce too. Bug is occuring few times per day. I don't know when. Code is not changing. I can attach full source in few days but you can't reproduce the bug immediatly after installing extension.
I'm sorry, the bug was in Classic Theme Restorer extension.
Status: UNCONFIRMED → RESOLVED
Closed: 7 years ago
Resolution: --- → INVALID
Flags: needinfo?(vitaliydev)
Product: Toolkit → WebExtensions
You need to log in before you can comment on or make changes to this bug.