Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Unified Diff: ios/chrome/browser/ui/browser_view_controller.mm

Issue 2737943003: Moved window opening callback to WebStateDelegate. (Closed)
Patch Set: Rebased Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/chrome/browser/tabs/tab.mm ('k') | ios/web/public/test/crw_mock_web_state_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/ui/browser_view_controller.mm
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm
index 2399ec4cf52459acd988c18e71e16ab8a7cf54a2..a9b01c7d578fa0d66d0fb4317ce7390689acb2b6 100644
--- a/ios/chrome/browser/ui/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -155,6 +155,7 @@
#import "ios/chrome/browser/ui/util/pasteboard_util.h"
#import "ios/chrome/browser/ui/voice/text_to_speech_player.h"
#include "ios/chrome/browser/upgrade/upgrade_center.h"
+#import "ios/chrome/browser/web/blocked_popup_tab_helper.h"
#import "ios/chrome/browser/web/error_page_content.h"
#import "ios/chrome/browser/web/passkit_dialog_provider.h"
#import "ios/chrome/browser/web/repost_form_tab_helper.h"
@@ -2382,6 +2383,39 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver {
#pragma mark - CRWWebStateDelegate methods.
- (web::WebState*)webState:(web::WebState*)webState
+ createNewWebStateForURL:(const GURL&)URL
+ openerURL:(const GURL&)openerURL
+ initiatedByUser:(BOOL)initiatedByUser {
+ // Check if requested web state is a popup and block it if necessary.
+ if (!initiatedByUser) {
+ auto* helper = BlockedPopupTabHelper::FromWebState(webState);
+ if (helper->ShouldBlockPopup(openerURL)) {
+ web::NavigationItem* item =
+ webState->GetNavigationManager()->GetLastCommittedItem();
+ web::Referrer referrer(openerURL, item->GetReferrer().policy);
+ helper->HandlePopup(URL, referrer);
+ return nil;
+ }
+ }
+
+ // Requested web state should not be blocked from opening.
+ Tab* currentTab = LegacyTabHelper::GetTabForWebState(webState);
+ [currentTab updateSnapshotWithOverlay:YES visibleFrameOnly:YES];
+
+ // Tabs open by DOM are always renderer initiated.
+ web::NavigationManager::WebLoadParams params(GURL{});
+ params.transition_type = ui::PAGE_TRANSITION_LINK;
+ params.is_renderer_initiated = true;
+ Tab* childTab = [[self tabModel]
+ insertTabWithLoadParams:params
+ opener:currentTab
+ openedByDOM:YES
+ atIndex:TabModelConstants::kTabPositionAutomatically
+ inBackground:NO];
+ return childTab.webState;
+}
+
+- (web::WebState*)webState:(web::WebState*)webState
openURLWithParams:(const web::WebState::OpenURLParams&)params {
switch (params.disposition) {
case WindowOpenDisposition::NEW_FOREGROUND_TAB:
« no previous file with comments | « ios/chrome/browser/tabs/tab.mm ('k') | ios/web/public/test/crw_mock_web_state_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698