page_transition_types.cc 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // Copyright (c) 2010 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ui/base/page_transition_types.h"
  5. #include <ostream>
  6. #include "base/check_op.h"
  7. #include "base/notreached.h"
  8. namespace ui {
  9. bool PageTransitionCoreTypeIs(PageTransition lhs,
  10. PageTransition rhs) {
  11. // Expect the rhs to be a compile time constant without qualifiers.
  12. DCHECK_EQ(PageTransitionGetQualifier(rhs), 0);
  13. DCHECK(PageTransitionIsValidType(rhs));
  14. return static_cast<int32_t>(PageTransitionStripQualifier(lhs)) ==
  15. static_cast<int32_t>(PageTransitionStripQualifier(rhs));
  16. }
  17. bool PageTransitionTypeIncludingQualifiersIs(PageTransition lhs,
  18. PageTransition rhs) {
  19. return static_cast<int32_t>(lhs) == static_cast<int32_t>(rhs);
  20. }
  21. PageTransition PageTransitionStripQualifier(PageTransition type) {
  22. return static_cast<PageTransition>(type & ~PAGE_TRANSITION_QUALIFIER_MASK);
  23. }
  24. bool PageTransitionIsValidType(int32_t type) {
  25. PageTransition t = PageTransitionStripQualifier(
  26. static_cast<PageTransition>(type));
  27. return (t <= PAGE_TRANSITION_LAST_CORE);
  28. }
  29. PageTransition PageTransitionFromInt(int32_t type) {
  30. if (!PageTransitionIsValidType(type)) {
  31. NOTREACHED() << "Invalid transition type " << type;
  32. // Return a safe default so we don't have corrupt data in release mode.
  33. return PAGE_TRANSITION_LINK;
  34. }
  35. return static_cast<PageTransition>(type);
  36. }
  37. bool PageTransitionIsMainFrame(PageTransition type) {
  38. return !PageTransitionCoreTypeIs(type, PAGE_TRANSITION_AUTO_SUBFRAME) &&
  39. !PageTransitionCoreTypeIs(type, PAGE_TRANSITION_MANUAL_SUBFRAME);
  40. }
  41. bool PageTransitionIsRedirect(PageTransition type) {
  42. return (type & PAGE_TRANSITION_IS_REDIRECT_MASK) != 0;
  43. }
  44. bool PageTransitionIsNewNavigation(PageTransition type) {
  45. return (type & PAGE_TRANSITION_FORWARD_BACK) == 0 &&
  46. !PageTransitionCoreTypeIs(type, PAGE_TRANSITION_RELOAD);
  47. }
  48. int32_t PageTransitionGetQualifier(PageTransition type) {
  49. return type & PAGE_TRANSITION_QUALIFIER_MASK;
  50. }
  51. bool PageTransitionIsWebTriggerable(PageTransition type) {
  52. int32_t t = PageTransitionStripQualifier(type);
  53. switch (t) {
  54. case PAGE_TRANSITION_LINK:
  55. case PAGE_TRANSITION_AUTO_SUBFRAME:
  56. case PAGE_TRANSITION_MANUAL_SUBFRAME:
  57. case PAGE_TRANSITION_FORM_SUBMIT:
  58. return true;
  59. }
  60. return false;
  61. }
  62. const char* PageTransitionGetCoreTransitionString(PageTransition type) {
  63. int32_t t = PageTransitionStripQualifier(type);
  64. switch (t) {
  65. case PAGE_TRANSITION_LINK: return "link";
  66. case PAGE_TRANSITION_TYPED: return "typed";
  67. case PAGE_TRANSITION_AUTO_BOOKMARK: return "auto_bookmark";
  68. case PAGE_TRANSITION_AUTO_SUBFRAME: return "auto_subframe";
  69. case PAGE_TRANSITION_MANUAL_SUBFRAME: return "manual_subframe";
  70. case PAGE_TRANSITION_GENERATED: return "generated";
  71. case PAGE_TRANSITION_AUTO_TOPLEVEL: return "auto_toplevel";
  72. case PAGE_TRANSITION_FORM_SUBMIT: return "form_submit";
  73. case PAGE_TRANSITION_RELOAD: return "reload";
  74. case PAGE_TRANSITION_KEYWORD: return "keyword";
  75. case PAGE_TRANSITION_KEYWORD_GENERATED: return "keyword_generated";
  76. }
  77. return nullptr;
  78. }
  79. } // namespace ui