深入了解 Firefox 中的 Chrome 协议

发布于 2025-01-08 12:25:47 字数 1156 浏览 0 评论 0原文

我想知道是否可以查看输入流内部 当 Firefox 使用“chrome://”协议时。让我更 清除。让我们采用以下调用序列,例如:

  1. nsXULDocument.cpp 有一个 nsXULDocument::ResumeWalk() 方法。
  2. 它调用 LoadScript() [大约第 3004 行]。
  3. LoadScript() 调用 NS_NewStreamLoader [nsXULDocument.cpp, 行 第3440章
  4. NS_NewStreamLoader 调用 NS_NewChannel() [nsNetUtil.h,第 593 行]。
  5. NS_NewChannel() 然后调用 ioservice->NewChannelFromURI() [nsNetUtil.h,第 226 行]。
  6. NewChannelFromURI() 调用 NewChannelFromURIWithProxyFlags() [nsIOService.cpp 行:596]。
  7. NewChannelFromURIWithProxyFlags() 调用 handler->newChannel() ,其中 在运行时被解析为 nsChromeProtocolHandler->newChannel() [nsChromeProtocolHandler.cpp,第 182 行]。
  8. 这又调用 ioServ->NewChannelFromURI() [nsChromeProtocolHandler.cpp,第 196 行]。
  9. 重复步骤6。
  10. 重复步骤7,但是,在不同的时间,它可以加载 基于协议(chrome、jar、文件等)的不同处理程序

我描述上述调用序列的目的是设置 我的问题的背景。我想知道“chrome://”协议何时 使用过,并且当使用它时,我想处理输入流。为了 例如,如果 Firefox 正在加载类似“chrome://package/content/ script.js" 我想在从以下位置访问该文件时拦截该文件 磁盘。拦截文件后,我可能会更改它的内容,或者 将文件的内容转储到我选择的文件夹中。

因此,每当 Firefox 读取文件时(使用 fread() 等方法, 也许,我也想知道这一点),我想确定读取请求是否来自chrome协议,此时我可以根据我的需要对文件进行一些更改。对此有什么帮助吗?

I was wondering whether it is possible to look inside the input stream
when the "chrome://" protocol is used in Firefox. Let me be more
clear. Let's take the following call sequence, for example:

  1. nsXULDocument.cpp has a nsXULDocument::ResumeWalk() method.
  2. It calls LoadScript() [around line:3004].
  3. LoadScript() calls NS_NewStreamLoader [nsXULDocument.cpp, line
    3440].
  4. NS_NewStreamLoader calls NS_NewChannel() [nsNetUtil.h, line:593].
  5. NS_NewChannel() then calls ioservice->NewChannelFromURI()
    [nsNetUtil.h, line:226].
  6. NewChannelFromURI() calls NewChannelFromURIWithProxyFlags()
    [nsIOService.cpp line:596].
  7. NewChannelFromURIWithProxyFlags() calls handler->newChannel() which
    is resolved at runtime to become nsChromeProtocolHandler->newChannel()
    [nsChromeProtocolHandler.cpp, line:182].
  8. This in turn calls ioServ->NewChannelFromURI()
    [nsChromeProtocolHandler.cpp, line:196].
  9. Step 6 is repeated.
  10. Step 7 is repeated, however, at different times, it can load
    different handlers based on the protocol (chrome, jar, file etc.)

My intention for describing the above call sequence was to set up the
context for my problem. I want to know when "chrome://" protocol is
used, and when it is used, I want to process the input stream. For
example, if Firefox is loading a script like "chrome://package/content/
script.js" I want to intercept the file when it is accessed from the
disk. After intercepting the file, I might change it's contents, or
dump the file's content in a folder of my choice.

So, whenever Firefox reads a file (using a method like fread(),
probably, I would like to know that as well), I would like to determine whether the read request was from the chrome protocol or not, and at that moment I can make some changes to the file based on my needs. Any helps regarding this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半仙 2025-01-15 12:25:47

对于那些偶然发现对“chrome”协议感到好奇的人,以下是一些可能有用的参考资料:
- Chrome 协议,SPDY 的一部分
- 让网络更快的项目

For those who've stumbled here curious about the 'chrome' protocol, here are some references that may be handy:
- Chrome Protocol, part of SPDY
- Lets make the web faster project

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文