在 /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()
virtual void PostAfterStartupTask(
const tracked_objects::Location& from_here,
const scoped_refptr<base::TaskRunner>& task_runner,
const base::Closure& task);
virtual bool IsBrowserStartupComplete();
virtual WebContentsViewDelegate* GetWebContentsViewDelegate(
WebContents* web_contents);
virtual void RenderProcessWillLaunch(RenderProcessHost* host) {}
通知,BrowserChildProcessHost已经被创建。
virtual void BrowserChildProcessHostCreated(BrowserChildProcessHost* host) {}
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);
virtual void GetAdditionalWebUISchemes(std::vector<std::string>* additional_schemes) {}
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);