Chromium Code Reviews| 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..c49d33d6bd5d009e20e553f4f0f08c3457b0cc13 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 it actually OK to omit the parent process ID here? |
|
jochen (gone - plz use gerrit)
2014/07/14 09:38:36
can you file a bug for this (exposing the parent p
dcheng
2014/07/14 20:12:56
I actually wasn't sure if we needed this. My recol
|
| +// 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())); |