chromium之ContentBrowserClient

孔建柏
2023-12-01

在 /src/content/public/browser/content_browser_client.h中定义的类,ContentBrowserClient,其提供了一系列的API,用来参与实现browser的逻辑,其中的API主要由content browser的client来实现,其实也就是ContentBrowserClient的子类来实现。除非在某些指定的情况下,这些方法的调用都是在UI线程中。使用这些接口的时候要谨慎,防止嵌入的接口过渡膨胀,同时也要避免这些仅仅在Chrome中专用。通常情况下,client的调用发生在部分代码中。要么是嵌入的钩子函数,要么是某些观察者接口中。

接下来看看这些方法:

首先是关于之前的博客中介绍的BrowserMainParts,这个方法允许我们在browser的启动代码中添加很多自定义实现的BrowserMainParts,详情可以了解BrowserMainParts 的定义。

  virtual BrowserMainParts* CreateBrowserMainParts(const MainFunctionParams& parameters);


这个方法允许开发者改变BrowserThread::PostAfterStartupTask的默认行为以便于更好的适用于开发者脑海中关于startup代码的定义。这个方法可能在任何线程中调用。

详情可以参考BrowserThread::PostAfterStartupTask()

  virtual void PostAfterStartupTask(
      const tracked_objects::Location& from_here,
      const scoped_refptr<base::TaskRunner>& task_runner,
      const base::Closure& task);


允许开发者指明关注的启动代码是否完成,可以在任何线程中调用。这个方法应该被一次性调用。如果需要不断轮询这个方法,请使用以上的PostAfterStartupTask作为替代。
  virtual bool IsBrowserStartupComplete();


如果content创建了WebContentView的实现,WebContentView会要求开发者返回一个代理来定制view。delegate就属于这个view。
  virtual WebContentsViewDelegate* GetWebContentsViewDelegate(
      WebContents* web_contents);


通知,render进程将要被创建。在content层添加其BrowserMessageFilter之前被调用,以便于开发者的IPC能有较高的优先级
 virtual void RenderProcessWillLaunch(RenderProcessHost* host) {}


通知,BrowserChildProcessHost已经被创建。

virtual void BrowserChildProcessHostCreated(BrowserChildProcessHost* host) {}


为给定的实际url获取一个有效的url,允许开发者在同一个SiteInstance中组合不同的url模式
virtual GURL GetEffectiveURL(BrowserContext* browser_context, const GRUL& url);


返回指定的有效url的所有实例是否被同一个进程渲染,而不是每个SiteInstance使用一个process。

virtual bool ShouldUseProcessPerSite(BrowserContext* browser_context, const GRUL& effective_url);


针对参数effctive_site_url,使站点分离可用的话返回true,这个调用允许开发者通过content层强制添加网站分离策略。

只有当以下两种的情况发生的时候,才会调用这个函数:

1.当嵌入者被要求判断ContentClient::IsSupplementarySiteIsolationModeEnable()是否返回true。

2.当content层根据其内部的策略决定不对effective_site_url采用站点分离时(比如设置了一个站点一个进程)。

virtual void DoesRequestDedicatedProcess(BrowserContext browser_context, const GRUL& effective_site_url);


只有当有效的url是由于自身局限在进程中不能存活站点的一部分时,才返回true。这个方法只在对于该url站点分离可用时调用,并且一个有漏洞的工作方案。

virtual bool ShouldLockToOrigin(BrowserContext* browser_context, const GURL& effective_url);

返回一个附加的WebUI模式的列表,如果有的话。这些附加的模式扮演者chrome的别名:模式。这些附加的模式可能会也可能不会提供特殊的WebUI页面,这取决于特殊的变量URLDataSource以及URLDataSource::ShouldServeRequest重载。对于此返回的所有模式,view-source都是允许的。
virtual void GetAdditionalWebUISchemes(std::vector<std::string>* additional_schemes) {}

在WebUI对象被创建来获取的聚合的使用数据时调用。只有内部的url(例如以chrome:// 开头的)才会被记录。返回值就是url是否被记录。
virtual bool LogWebUIUrl(const GURL& web_ui_url) const;


返回一个指定的url是否没有继承者的内部协议处理器处理。

virtual bool IsHandledUrl(const GURL& url);


返回给定的进程是否允许提交参数 url。相对于IsSuitableHost方法来说是一个更加保守的核对。

在navigation已经提交之后调用来确保进程不会超过自身的权限。

virtual bool CanCommitURL(RenderProcessHost* process_host, const GRUL& url);




 类似资料: