blob: e4cc29db66c7384b24e03646a563637c0a0d6104 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/arc/intent_helper/page_transition_util.h"
namespace arc {
bool ShouldIgnoreNavigation(ui::PageTransition page_transition,
bool allow_form_submit,
bool allow_client_redirect) {
// |allow_client_redirect| is true only for non-http(s) cases, and for those
// we can ignore the CLIENT/SERVER REDIRECT flags, otherwise mask out the
// SERVER_REDIRECT flag only.
page_transition = MaskOutPageTransition(
page_transition, allow_client_redirect
? ui::PAGE_TRANSITION_IS_REDIRECT_MASK
: ui::PAGE_TRANSITION_SERVER_REDIRECT);
if (!ui::PageTransitionCoreTypeIs(page_transition,
ui::PAGE_TRANSITION_LINK) &&
!(allow_form_submit &&
ui::PageTransitionCoreTypeIs(page_transition,
ui::PAGE_TRANSITION_FORM_SUBMIT))) {
// Do not handle the |url| if this event wasn't spawned by the user clicking
// on a link.
return true;
}
if (ui::PageTransitionGetQualifier(page_transition) != 0) {
// Qualifiers indicate that this navigation was the result of a click on a
// forward/back button, or typing in the URL bar. Don't handle any of those
// types of navigations.
return true;
}
return false;
}
ui::PageTransition MaskOutPageTransition(ui::PageTransition page_transition,
ui::PageTransition mask) {
return ui::PageTransitionFromInt(page_transition & ~mask);
}
} // namespace arc