electron/electron

Add `chrome.*` APIs to support Accessibility DevTools extension

jlord opened this issue · 3 comments

jlord commented

We want to have Electron support the Chrome Accessibility DevTools extension but not all of the necessary chrome.* APIs are in yet. Many more have just been added so we've gone through to see which ones the extension needs that aren't yet in.

I'm not sure the the difficulty of getting in these remaining APIs and if it's something myself and @kevinsawicki can do? Would love feedback on that.

APIs needed for Accessibility DevTools Extension

  • chrome.devtools.inspectedWindow.tabID
  • chrome.devtools.inspectedWindow.eval
  • chrome.devtools.panels.elements.onSelectionChanged.addListener
  • chrome.devtools.panels.elements.createSidebarPane
  • chrome.experimental.devtools.audits.addCategory
  • chrome.extension.getURL
  • chrome.extension.lastError
  • chrome.extension.onRequest.addListener
  • chrome.extension.sendRequest
  • chrome.il8n.getMessage via #5924
  • chrome.runtime.id via #5894
  • chrome.storage.sync.get via #5974
  • chrome.storage.sync.set via #5974
  • chrome.tabs.executeScript
  • chrome.tabs.onRemoved.addListener
  • chrome.webNavigation.onBeforeNavigate.addListener via #6090
  • chrome.webNavigation.onBeforeNavigate.removeListener via #6090
  • chrome.webNavigation.onCompleted.addListener via #6090
  • chrome.webNavigation.onCompleted.removeListener via #6090

Parts of the chrome.extension API have been implemented, as well as the chrome.tabs. However it doesn't seem like we have any of chrome.webNavigation, chrome.il8n, or chrome.runtime in yet.

/cc @zcbenz

jlord commented

Currently Implemented chrome.* APIs

  • chrome.devtools.inspectedWindow.eval
  • chrome.devtools.inspectedWindow.getResources
  • chrome.devtools.inspectedWindow.onResourceAdded.addListener
  • chrome.devtools.inspectedWindow.onResourceAdded.removeListener
  • chrome.devtools.inspectedWindow.onResourceContentCommitted.addListener
  • chrome.devtools.inspectedWindow.onResourceContentCommitted.removeListener
  • chrome.devtools.inspectedWindow.reload
  • chrome.devtools.inspectedWindow.tabId
  • chrome.devtools.network.addRequestHeaders
  • chrome.devtools.network.getHAR
  • chrome.devtools.network.onFinished.addListener
  • chrome.devtools.network.onFinished.removeListener
  • chrome.devtools.network.onNavigated.addListener
  • chrome.devtools.network.onNavigated.removeListener
  • chrome.devtools.network.onRequestFinished.addListener
  • chrome.devtools.network.onRequestFinished.removeListener
  • chrome.devtools.panels.SearchAction.CancelSearch
  • chrome.devtools.panels.SearchAction.NextSearchResult
  • chrome.devtools.panels.SearchAction.PerformSearch
  • chrome.devtools.panels.SearchAction.PreviousSearchResult
  • chrome.devtools.panels.applyStyleSheet
  • chrome.devtools.panels.create
  • chrome.devtools.panels.elements.createSidebarPane
  • chrome.devtools.panels.elements.onSelectionChanged.addListener
  • chrome.devtools.panels.elements.onSelectionChanged.removeListener
  • chrome.devtools.panels.openResource
  • chrome.devtools.panels.setOpenResourceHandler
  • chrome.devtools.panels.sources.createSidebarPane
  • chrome.devtools.panels.sources.onSelectionChanged.addListener
  • chrome.devtools.panels.sources.onSelectionChanged.removeListener
  • chrome.experimental.devtools.audits.addCategory
  • chrome.experimental.devtools.inspectedWindow.eval
  • chrome.experimental.devtools.inspectedWindow.getResources
  • chrome.experimental.devtools.inspectedWindow.onResourceAdded.addListener
  • chrome.experimental.devtools.inspectedWindow.onResourceAdded.removeListener
  • chrome.experimental.devtools.inspectedWindow.onResourceContentCommitted.addListener
  • chrome.experimental.devtools.inspectedWindow.onResourceContentCommitted.removeListener
  • chrome.experimental.devtools.inspectedWindow.reload
  • chrome.experimental.devtools.inspectedWindow.tabId
  • chrome.experimental.devtools.network.addRequestHeaders
  • chrome.experimental.devtools.network.getHAR
  • chrome.experimental.devtools.network.onFinished.addListener
  • chrome.experimental.devtools.network.onFinished.removeListener
  • chrome.experimental.devtools.network.onNavigated.addListener
  • chrome.experimental.devtools.network.onNavigated.removeListener
  • chrome.experimental.devtools.network.onRequestFinished.addListener
  • chrome.experimental.devtools.network.onRequestFinished.removeListener
  • chrome.experimental.devtools.panels.SearchAction.CancelSearch
  • chrome.experimental.devtools.panels.SearchAction.NextSearchResult
  • chrome.experimental.devtools.panels.SearchAction.PerformSearch
  • chrome.experimental.devtools.panels.SearchAction.PreviousSearchResult
  • chrome.experimental.devtools.panels.applyStyleSheet
  • chrome.experimental.devtools.panels.create
  • chrome.experimental.devtools.panels.elements.createSidebarPane
  • chrome.experimental.devtools.panels.elements.onSelectionChanged.addListener
  • chrome.experimental.devtools.panels.elements.onSelectionChanged.removeListener
  • chrome.experimental.devtools.panels.openResource
  • chrome.experimental.devtools.panels.setOpenResourceHandler
  • chrome.experimental.devtools.panels.sources.createSidebarPane
  • chrome.experimental.devtools.panels.sources.onSelectionChanged.addListener
  • chrome.experimental.devtools.panels.sources.onSelectionChanged.removeListener
  • chrome.experimental.devtools.resources.addRequestHeaders
  • chrome.experimental.devtools.resources.getHAR
  • chrome.experimental.devtools.resources.onFinished.addListener
  • chrome.experimental.devtools.resources.onFinished.removeListener
  • chrome.experimental.devtools.resources.onNavigated.addListener
  • chrome.experimental.devtools.resources.onNavigated.removeListener
  • chrome.experimental.devtools.resources.onRequestFinished.addListener
  • chrome.experimental.devtools.resources.onRequestFinished.removeListener
  • chrome.extension.connect
  • chrome.extension.getURL
  • chrome.extension.sendMessage
  • chrome.pageAction.getPopup
  • chrome.pageAction.getTitle
  • chrome.pageAction.hide
  • chrome.pageAction.setIcon
  • chrome.pageAction.setPopup
  • chrome.pageAction.setTitle
  • chrome.pageAction.show
  • chrome.runtime.connect
  • chrome.runtime.getURL
  • chrome.runtime.sendMessage
  • chrome.storage.sync.get
  • chrome.storage.sync.set
  • chrome.tabs.executeScript
  • chrome.tabs.sendMessage

Most of the needed APIs can be implemented by following how other APIs were implemented in chrome-api.js. The chrome.webNavigation APIs are a bit challenging, we have to wrap the ses.webRequest API to implement it, and it may conflict with apps that using that API.

I say it would take many efforts, but most of the work should be just JavaScript.

Closing this out since the APIs needed to ship http://electron.atom.io/blog/2016/08/23/accessibility-tools were completed.

Can open up new issues for additional APIs needed going forward.