| Index: chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.cc
|
| diff --git a/chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.cc b/chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.cc
|
| index d0c75b438d8539c1209bb07e8bb6ee499f7d14c5..c9266a7c089f9448048080f5f4ec016abc2dbc7e 100644
|
| --- a/chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.cc
|
| +++ b/chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.cc
|
| @@ -14,6 +14,7 @@
|
| #include "chrome/browser/extensions/extension_tab_util.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/common/extensions/api/web_navigation.h"
|
| +#include "content/public/browser/render_frame_host.h"
|
| #include "content/public/browser/render_process_host.h"
|
| #include "content/public/browser/render_view_host.h"
|
| #include "content/public/browser/web_contents.h"
|
| @@ -56,26 +57,27 @@ void DispatchEvent(content::BrowserContext* browser_context,
|
|
|
| } // namespace
|
|
|
| -int GetFrameId(bool is_main_frame, int64 frame_id) {
|
| - return is_main_frame ? 0 : static_cast<int>(frame_id);
|
| +int GetFrameId(content::RenderFrameHost* frame_host) {
|
| + if (!frame_host)
|
| + return -1;
|
| + return !frame_host->GetParent() ? 0 : frame_host->GetRoutingID();
|
| }
|
|
|
| // Constructs and dispatches an onBeforeNavigate event.
|
| +// TODO(dcheng): Is the parent process ID needed here? http://crbug.com/393640
|
| +// Collisions are probably possible... but maybe this won't ever happen because
|
| +// of the SiteInstance grouping policies.
|
| void DispatchOnBeforeNavigate(content::WebContents* web_contents,
|
| - int render_process_id,
|
| - int64 frame_id,
|
| - bool is_main_frame,
|
| - int64 parent_frame_id,
|
| - bool parent_is_main_frame,
|
| + content::RenderFrameHost* frame_host,
|
| const GURL& validated_url) {
|
| scoped_ptr<base::ListValue> args(new base::ListValue());
|
| base::DictionaryValue* dict = new base::DictionaryValue();
|
| dict->SetInteger(keys::kTabIdKey, ExtensionTabUtil::GetTabId(web_contents));
|
| dict->SetString(keys::kUrlKey, validated_url.spec());
|
| - dict->SetInteger(keys::kProcessIdKey, render_process_id);
|
| - dict->SetInteger(keys::kFrameIdKey, GetFrameId(is_main_frame, frame_id));
|
| + dict->SetInteger(keys::kProcessIdKey, frame_host->GetProcess()->GetID());
|
| + dict->SetInteger(keys::kFrameIdKey, GetFrameId(frame_host));
|
| dict->SetInteger(keys::kParentFrameIdKey,
|
| - GetFrameId(parent_is_main_frame, parent_frame_id));
|
| + GetFrameId(frame_host->GetParent()));
|
| dict->SetDouble(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now()));
|
| args->Append(dict);
|
|
|
| @@ -89,17 +91,15 @@ void DispatchOnBeforeNavigate(content::WebContents* web_contents,
|
| // event.
|
| void DispatchOnCommitted(const std::string& event_name,
|
| content::WebContents* web_contents,
|
| - int64 frame_id,
|
| - bool is_main_frame,
|
| + content::RenderFrameHost* frame_host,
|
| const GURL& url,
|
| content::PageTransition transition_type) {
|
| scoped_ptr<base::ListValue> args(new base::ListValue());
|
| base::DictionaryValue* dict = new base::DictionaryValue();
|
| dict->SetInteger(keys::kTabIdKey, ExtensionTabUtil::GetTabId(web_contents));
|
| dict->SetString(keys::kUrlKey, url.spec());
|
| - dict->SetInteger(keys::kProcessIdKey,
|
| - web_contents->GetRenderViewHost()->GetProcess()->GetID());
|
| - dict->SetInteger(keys::kFrameIdKey, GetFrameId(is_main_frame, frame_id));
|
| + dict->SetInteger(keys::kProcessIdKey, frame_host->GetProcess()->GetID());
|
| + dict->SetInteger(keys::kFrameIdKey, GetFrameId(frame_host));
|
| std::string transition_type_string =
|
| content::PageTransitionGetCoreTransitionString(transition_type);
|
| // For webNavigation API backward compatibility, keep "start_page" even after
|
| @@ -127,17 +127,15 @@ void DispatchOnCommitted(const std::string& event_name,
|
|
|
| // Constructs and dispatches an onDOMContentLoaded event.
|
| void DispatchOnDOMContentLoaded(content::WebContents* web_contents,
|
| - const GURL& url,
|
| - bool is_main_frame,
|
| - int64 frame_id) {
|
| + content::RenderFrameHost* frame_host,
|
| + const GURL& url) {
|
| scoped_ptr<base::ListValue> args(new base::ListValue());
|
| base::DictionaryValue* dict = new base::DictionaryValue();
|
| dict->SetInteger(keys::kTabIdKey,
|
| ExtensionTabUtil::GetTabId(web_contents));
|
| dict->SetString(keys::kUrlKey, url.spec());
|
| - dict->SetInteger(keys::kProcessIdKey,
|
| - web_contents->GetRenderViewHost()->GetProcess()->GetID());
|
| - dict->SetInteger(keys::kFrameIdKey, GetFrameId(is_main_frame, frame_id));
|
| + dict->SetInteger(keys::kProcessIdKey, frame_host->GetProcess()->GetID());
|
| + dict->SetInteger(keys::kFrameIdKey, GetFrameId(frame_host));
|
| dict->SetDouble(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now()));
|
| args->Append(dict);
|
|
|
| @@ -149,17 +147,15 @@ void DispatchOnDOMContentLoaded(content::WebContents* web_contents,
|
|
|
| // Constructs and dispatches an onCompleted event.
|
| void DispatchOnCompleted(content::WebContents* web_contents,
|
| - const GURL& url,
|
| - bool is_main_frame,
|
| - int64 frame_id) {
|
| + content::RenderFrameHost* frame_host,
|
| + const GURL& url) {
|
| scoped_ptr<base::ListValue> args(new base::ListValue());
|
| base::DictionaryValue* dict = new base::DictionaryValue();
|
| dict->SetInteger(keys::kTabIdKey,
|
| ExtensionTabUtil::GetTabId(web_contents));
|
| dict->SetString(keys::kUrlKey, url.spec());
|
| - dict->SetInteger(keys::kProcessIdKey,
|
| - web_contents->GetRenderViewHost()->GetProcess()->GetID());
|
| - dict->SetInteger(keys::kFrameIdKey, GetFrameId(is_main_frame, frame_id));
|
| + dict->SetInteger(keys::kProcessIdKey, frame_host->GetProcess()->GetID());
|
| + dict->SetInteger(keys::kFrameIdKey, GetFrameId(frame_host));
|
| dict->SetDouble(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now()));
|
| args->Append(dict);
|
|
|
| @@ -172,8 +168,7 @@ void DispatchOnCompleted(content::WebContents* web_contents,
|
| void DispatchOnCreatedNavigationTarget(
|
| content::WebContents* web_contents,
|
| content::BrowserContext* browser_context,
|
| - int64 source_frame_id,
|
| - bool source_frame_is_main_frame,
|
| + content::RenderFrameHost* source_frame_host,
|
| content::WebContents* target_web_contents,
|
| const GURL& target_url) {
|
| // Check that the tab is already inserted into a tab strip model. This code
|
| @@ -188,9 +183,8 @@ void DispatchOnCreatedNavigationTarget(
|
| dict->SetInteger(keys::kSourceTabIdKey,
|
| ExtensionTabUtil::GetTabId(web_contents));
|
| dict->SetInteger(keys::kSourceProcessIdKey,
|
| - web_contents->GetRenderViewHost()->GetProcess()->GetID());
|
| - dict->SetInteger(keys::kSourceFrameIdKey,
|
| - GetFrameId(source_frame_is_main_frame, source_frame_id));
|
| + source_frame_host->GetProcess()->GetID());
|
| + dict->SetInteger(keys::kSourceFrameIdKey, GetFrameId(source_frame_host));
|
| dict->SetString(keys::kUrlKey, target_url.possibly_invalid_spec());
|
| dict->SetInteger(keys::kTabIdKey,
|
| ExtensionTabUtil::GetTabId(target_web_contents));
|
| @@ -205,17 +199,15 @@ void DispatchOnCreatedNavigationTarget(
|
|
|
| // Constructs and dispatches an onErrorOccurred event.
|
| void DispatchOnErrorOccurred(content::WebContents* web_contents,
|
| - int render_process_id,
|
| + content::RenderFrameHost* frame_host,
|
| const GURL& url,
|
| - int64 frame_id,
|
| - bool is_main_frame,
|
| int error_code) {
|
| scoped_ptr<base::ListValue> args(new base::ListValue());
|
| base::DictionaryValue* dict = new base::DictionaryValue();
|
| dict->SetInteger(keys::kTabIdKey, ExtensionTabUtil::GetTabId(web_contents));
|
| dict->SetString(keys::kUrlKey, url.spec());
|
| - dict->SetInteger(keys::kProcessIdKey, render_process_id);
|
| - dict->SetInteger(keys::kFrameIdKey, GetFrameId(is_main_frame, frame_id));
|
| + dict->SetInteger(keys::kProcessIdKey, frame_host->GetProcess()->GetID());
|
| + dict->SetInteger(keys::kFrameIdKey, GetFrameId(frame_host));
|
| dict->SetString(keys::kErrorKey, net::ErrorToString(error_code));
|
| dict->SetDouble(keys::kTimeStampKey,
|
| MilliSecondsFromTime(base::Time::Now()));
|
|
|