@@ -760,13 +760,12 @@ class MCCefBrowserClient : public CefClient, CefLifeSpanHandler, CefRequestHandl
760760 MCCefMessageResult m_message_result;
761761 std::map<int64_t , MCCefErrorInfo> m_load_error_frames;
762762
763- // IM-2014-05-06: [[ Bug 12384 ]] Set of URLs for which callback messages will not be sent
764- std::set <CefString> m_ignore_urls ;
763+ // Describes where loading url requests came from
764+ std::map <CefString, PageOrigin> m_load_url_origins ;
765765
766766 CefString m_last_request_url;
767767
768768 PageOrigin m_displayed_page_origin;
769- PageOrigin m_loading_page_origin;
770769
771770 // Error handling - we need to keep track of url that failed to load in a
772771 // frame so we can send the correct url in onLoadEnd()
@@ -826,7 +825,7 @@ class MCCefBrowserClient : public CefClient, CefLifeSpanHandler, CefRequestHandl
826825 {
827826 m_owner = p_owner;
828827 m_browser_id = 0 ;
829- m_displayed_page_origin = m_loading_page_origin = PageOrigin::kNone ;
828+ m_displayed_page_origin = PageOrigin::kNone ;
830829 }
831830
832831 // IM-2014-07-21: [[ Bug 12296 ]] Method to allow owner to notify client of its deletion
@@ -843,28 +842,24 @@ class MCCefBrowserClient : public CefClient, CefLifeSpanHandler, CefRequestHandl
843842 virtual CefRefPtr<CefContextMenuHandler> GetContextMenuHandler () OVERRIDE { return this ; }
844843 virtual CefRefPtr<CefDragHandler> GetDragHandler () OVERRIDE { return this ; }
845844
846- void AddIgnoreUrl (const CefString &p_url)
845+ void AddLoadingUrl (const CefString &p_url, PageOrigin p_origin )
847846 {
848- m_ignore_urls. insert ( p_url) ;
847+ m_load_url_origins[ p_url] = p_origin ;
849848 }
850849
851- void RemoveIgnoreUrl (const CefString &p_url)
850+ void RemoveLoadingUrl (const CefString &p_url)
852851 {
853- m_ignore_urls .erase (p_url);
852+ m_load_url_origins .erase (p_url);
854853 }
855854
856- // IM-2014-05-06: [[ Bug 12384 ]] Test if callback should be sent for URL
857- bool IgnoreUrl (const CefString &p_url)
855+ bool GetLoadingUrlOrigin (const CefString &p_url, PageOrigin &r_origin)
858856 {
859- std::set<CefString>::iterator t_iter;
860- t_iter = m_ignore_urls.find (p_url);
861-
862- return t_iter != m_ignore_urls.end ();
863- }
864-
865- void SetLoadingPageOrigin (PageOrigin p_origin)
866- {
867- m_loading_page_origin = p_origin;
857+ auto t_iter = m_load_url_origins.find (p_url);
858+ if (t_iter == m_load_url_origins.end ())
859+ return false ;
860+
861+ r_origin = t_iter->second ;
862+ return true ;
868863 }
869864
870865 PageOrigin GetDisplayedPageOrigin ()
@@ -1036,10 +1031,17 @@ class MCCefBrowserClient : public CefClient, CefLifeSpanHandler, CefRequestHandl
10361031 CefString t_url;
10371032 t_url = p_request->GetURL ();
10381033
1034+ PageOrigin t_origin = PageOrigin::kNone ;
1035+
10391036 if (p_user_gesture)
1040- SetLoadingPageOrigin (PageOrigin::kBrowse );
1037+ {
1038+ t_origin = PageOrigin::kBrowse ;
1039+ /* UNCHECKED */ AddLoadingUrl (t_url, t_origin);
1040+ }
1041+ else
1042+ /* UNCHECKED */ GetLoadingUrlOrigin (t_url, t_origin);
10411043
1042- if (IgnoreUrl (t_url) )
1044+ if (t_origin == PageOrigin:: kSetSource )
10431045 return false ;
10441046
10451047 char *t_url_str;
@@ -1061,7 +1063,10 @@ class MCCefBrowserClient : public CefClient, CefLifeSpanHandler, CefRequestHandl
10611063 CefString t_url;
10621064 t_url = p_request->GetURL ();
10631065
1064- if (IgnoreUrl (t_url))
1066+ PageOrigin t_origin = PageOrigin::kNone ;
1067+ /* UNCHECKED */ GetLoadingUrlOrigin (t_url, t_origin);
1068+
1069+ if (t_origin == PageOrigin::kSetSource )
10651070 return RV_CONTINUE;
10661071
10671072 m_last_request_url = t_url;
@@ -1172,10 +1177,13 @@ class MCCefBrowserClient : public CefClient, CefLifeSpanHandler, CefRequestHandl
11721177 bool t_frame;
11731178 t_frame = !p_frame->IsMain ();
11741179
1180+ PageOrigin t_origin = PageOrigin::kNone ;
1181+ /* UNCHECKED */ GetLoadingUrlOrigin (t_url, t_origin);
1182+
11751183 if (!t_frame && !t_is_error)
1176- m_displayed_page_origin = m_loading_page_origin ;
1184+ m_displayed_page_origin = t_origin ;
11771185
1178- if (( !t_frame && m_loading_page_origin== PageOrigin::kSetSource ) || IgnoreUrl (t_url) )
1186+ if (!t_frame && t_origin == PageOrigin::kSetSource )
11791187 return ;
11801188
11811189 char *t_url_str;
@@ -1212,7 +1220,11 @@ class MCCefBrowserClient : public CefClient, CefLifeSpanHandler, CefRequestHandl
12121220 bool t_frame;
12131221 t_frame = !p_frame->IsMain ();
12141222
1215- if ((!t_frame && m_loading_page_origin == PageOrigin::kSetSource ) || IgnoreUrl (t_url))
1223+ PageOrigin t_origin = PageOrigin::kNone ;
1224+ /* UNCHECKED */ GetLoadingUrlOrigin (t_url, t_origin);
1225+ /* UNCHECKED */ RemoveLoadingUrl (t_url);
1226+
1227+ if (!t_frame && t_origin == PageOrigin::kSetSource )
12161228 return CefLoadHandler::OnLoadEnd (p_browser, p_frame, p_http_status_code);
12171229
12181230 char *t_url_str;
@@ -1302,7 +1314,7 @@ bool MCCefBrowserBase::Initialize()
13021314 CefString t_url (" data:text/html;charset=utf-8," );
13031315
13041316 // IM-2014-05-06: [[ Bug 12384 ]] Prevent callback messages for dummy URL
1305- m_client->SetLoadingPageOrigin ( MCCefBrowserClient::PageOrigin::kSetSource );
1317+ m_client->AddLoadingUrl (t_url, MCCefBrowserClient::PageOrigin::kSetSource );
13061318 PlatformConfigureWindow (t_window_info);
13071319
13081320 if (MC_CEF_USE_MULTITHREADED_MESSAGELOOP)
@@ -1620,7 +1632,7 @@ bool MCCefBrowserBase::LoadHTMLText(const char *p_htmltext, const char *p_base_u
16201632 if (!MCCefStringFromUtf8String (p_base_url, t_base_url))
16211633 return false ;
16221634
1623- m_client->SetLoadingPageOrigin ( MCCefBrowserClient::PageOrigin::kSetSource );
1635+ m_client->AddLoadingUrl (t_base_url, MCCefBrowserClient::PageOrigin::kSetSource );
16241636 m_browser->GetMainFrame ()->LoadString (t_htmltext, t_base_url);
16251637
16261638 return true ;
@@ -1832,7 +1844,7 @@ bool MCCefBrowserBase::GoToURL(const char *p_url)
18321844 if (!MCCefStringFromUtf8String (p_url, t_url))
18331845 return false ;
18341846
1835- m_client->SetLoadingPageOrigin ( MCCefBrowserClient::PageOrigin::kSetUrl );
1847+ m_client->AddLoadingUrl (t_url, MCCefBrowserClient::PageOrigin::kSetUrl );
18361848
18371849 t_frame->LoadURL (t_url);
18381850 return true ;
0 commit comments