Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "modules/screen_orientation/ScreenOrientation.h" | 6 #include "modules/screen_orientation/ScreenOrientation.h" |
| 7 | 7 |
| 8 #include "core/events/Event.h" | |
| 8 #include "core/frame/DOMWindow.h" | 9 #include "core/frame/DOMWindow.h" |
| 9 #include "core/frame/Frame.h" | 10 #include "core/frame/Frame.h" |
| 10 #include "core/frame/Screen.h" | 11 #include "core/frame/Screen.h" |
| 12 #include "modules/screen_orientation/ScreenOrientationController.h" | |
| 11 | 13 |
| 12 namespace WebCore { | 14 namespace WebCore { |
| 13 | 15 |
| 14 ScreenOrientation::ScreenOrientation(Screen* screen) | 16 ScreenOrientation::ScreenOrientation(Screen* screen) |
| 15 : DOMWindowProperty(screen->frame()) | 17 : DOMWindowProperty(screen->frame()) |
| 16 { | 18 { |
| 19 if (ScreenOrientationController* controller = ScreenOrientationController::f rom(page())) | |
| 20 controller->addObserver(this); | |
|
abarth-chromium
2014/02/18 01:34:27
Under what circumstances can |controller| be zero.
Inactive
2014/02/18 20:52:47
Done. No longer needed now that the controller is
| |
| 17 } | 21 } |
| 18 | 22 |
| 19 const char* ScreenOrientation::supplementName() | 23 const char* ScreenOrientation::supplementName() |
| 20 { | 24 { |
| 21 return "ScreenOrientation"; | 25 return "ScreenOrientation"; |
| 22 } | 26 } |
| 23 | 27 |
| 24 ScreenOrientation* ScreenOrientation::from(Screen* screen) | 28 ScreenOrientation* ScreenOrientation::from(Screen* screen) |
| 25 { | 29 { |
| 26 ScreenOrientation* supplement = static_cast<ScreenOrientation*>(Supplement<S creen>::from(screen, supplementName())); | 30 ScreenOrientation* supplement = static_cast<ScreenOrientation*>(Supplement<S creen>::from(screen, supplementName())); |
| 27 if (!supplement) { | 31 if (!supplement) { |
| 28 ASSERT(screen); | 32 ASSERT(screen); |
| 29 supplement = new ScreenOrientation(screen); | 33 supplement = new ScreenOrientation(screen); |
| 30 provideTo(screen, supplementName(), adoptPtr(supplement)); | 34 provideTo(screen, supplementName(), adoptPtr(supplement)); |
| 31 } | 35 } |
| 32 return supplement; | 36 return supplement; |
| 33 } | 37 } |
| 34 | 38 |
| 35 ScreenOrientation::~ScreenOrientation() | 39 ScreenOrientation::~ScreenOrientation() |
| 36 { | 40 { |
| 41 if (ScreenOrientationController* controller = ScreenOrientationController::f rom(page())) | |
|
Inactive
2014/02/17 18:23:13
I looked at the Geolocation module and it subclass
| |
| 42 controller->removeObserver(this); | |
|
abarth-chromium
2014/02/18 01:34:27
I believe the correct thing to do is to override w
| |
| 37 } | 43 } |
| 38 | 44 |
| 39 Screen* ScreenOrientation::screen() const | 45 Screen* ScreenOrientation::screen() const |
| 40 { | 46 { |
| 41 Frame* frame = this->frame(); | 47 Frame* frame = this->frame(); |
| 42 ASSERT(frame); | 48 ASSERT(frame); |
| 43 DOMWindow* window = frame->domWindow(); | 49 DOMWindow* window = frame->domWindow(); |
| 44 ASSERT(window); | 50 ASSERT(window); |
| 45 return window->screen(); | 51 return window->screen(); |
|
abarth-chromium
2014/02/18 01:34:27
Why not just:
return m_associatedDOMWindow->scree
Inactive
2014/02/18 20:52:47
This function is no longer needed now that the con
| |
| 46 } | 52 } |
| 47 | 53 |
| 54 struct ScreenOrientationInfo { | |
| 55 const AtomicString& name; | |
| 56 ScreenOrientationValues orientation; | |
| 57 }; | |
| 58 | |
| 59 static ScreenOrientationInfo* allowedOrientationsMap(unsigned& length) | |
|
abarth-chromium
2014/02/18 01:34:27
Please put free static functions at the top of the
Inactive
2014/02/18 20:52:47
Done.
| |
| 60 { | |
| 61 DEFINE_STATIC_LOCAL(const AtomicString, portrait, ("portrait", AtomicString: :ConstructFromLiteral)); | |
| 62 DEFINE_STATIC_LOCAL(const AtomicString, portraitPrimary, ("portrait-primary" , AtomicString::ConstructFromLiteral)); | |
| 63 DEFINE_STATIC_LOCAL(const AtomicString, portraitSecondary, ("portrait-second ary", AtomicString::ConstructFromLiteral)); | |
| 64 DEFINE_STATIC_LOCAL(const AtomicString, landscape, ("landscape", AtomicStrin g::ConstructFromLiteral)); | |
| 65 DEFINE_STATIC_LOCAL(const AtomicString, landscapePrimary, ("landscape-primar y", AtomicString::ConstructFromLiteral)); | |
| 66 DEFINE_STATIC_LOCAL(const AtomicString, landscapeSecondary, ("landscape-seco ndary", AtomicString::ConstructFromLiteral)); | |
| 67 | |
| 68 static ScreenOrientationInfo orientationMap[] = { | |
| 69 { portrait, OrientationPortrait }, | |
| 70 { portraitPrimary, OrientationPortraitPrimary }, | |
| 71 { portraitSecondary, OrientationPortraitSecondary }, | |
| 72 { landscape, OrientationLandscape }, | |
| 73 { landscapePrimary, OrientationLandscapePrimary }, | |
| 74 { landscapeSecondary, OrientationLandscapeSecondary } | |
| 75 }; | |
| 76 length = WTF_ARRAY_LENGTH(orientationMap); | |
| 77 return orientationMap; | |
| 78 } | |
| 79 | |
| 80 const AtomicString& ScreenOrientation::orientationToString(ScreenOrientationValu e orientation) | |
| 81 { | |
| 82 unsigned length = 0; | |
| 83 ScreenOrientationInfo* orientationMap = allowedOrientationsMap(length); | |
| 84 for (unsigned i = 0; i < length; ++i) { | |
| 85 if (orientationMap[i].orientation == orientation) | |
| 86 return orientationMap[i].name; | |
| 87 } | |
| 88 // We do no handle OrientationInvalid and OrientationAny but this is fine be cause screen.orientation | |
| 89 // should never return these and WebScreenOrientation does not define those values. | |
| 90 ASSERT_NOT_REACHED(); | |
| 91 return nullAtom; | |
| 92 } | |
| 93 | |
| 48 const AtomicString& ScreenOrientation::orientation(Screen* screen) | 94 const AtomicString& ScreenOrientation::orientation(Screen* screen) |
| 49 { | 95 { |
| 50 // FIXME: Implement. | 96 ScreenOrientation* screenOrientation = ScreenOrientation::from(screen); |
| 51 DEFINE_STATIC_LOCAL(const AtomicString, portraitPrimary, ("portrait-primary" , AtomicString::ConstructFromLiteral)); | 97 ASSERT(screenOrientation); |
| 52 return portraitPrimary; | 98 |
| 99 ScreenOrientationController* controller = ScreenOrientationController::from( screenOrientation->page()); | |
| 100 if (!controller) | |
| 101 return orientationToString(OrientationPortraitPrimary); | |
| 102 | |
| 103 return orientationToString(controller->orientation()); | |
| 53 } | 104 } |
| 54 | 105 |
| 55 bool ScreenOrientation::lockOrientation(Screen* screen, const Vector<String>& or ientations) | 106 bool ScreenOrientation::lockOrientation(Screen* screen, const Vector<String>& or ientations) |
| 56 { | 107 { |
| 57 // FIXME: Implement. | 108 // FIXME: Implement. |
| 58 return false; | 109 return false; |
| 59 } | 110 } |
| 60 | 111 |
| 61 bool ScreenOrientation::lockOrientation(Screen* screen, const AtomicString& orie ntation) | 112 bool ScreenOrientation::lockOrientation(Screen* screen, const AtomicString& orie ntation) |
| 62 { | 113 { |
| 63 // FIXME: Implement. | 114 // FIXME: Implement. |
| 64 return false; | 115 return false; |
| 65 } | 116 } |
| 66 | 117 |
| 67 void ScreenOrientation::unlockOrientation(Screen* screen) | 118 void ScreenOrientation::unlockOrientation(Screen* screen) |
| 68 { | 119 { |
| 69 // FIXME: Implement. | 120 // FIXME: Implement. |
| 70 } | 121 } |
| 71 | 122 |
| 123 void ScreenOrientation::orientationChanged() | |
| 124 { | |
| 125 ASSERT(screen()); | |
| 126 screen()->dispatchEvent(Event::create(EventTypeNames::orientationchange)); | |
| 127 } | |
| 128 | |
| 129 Page* ScreenOrientation::page() const | |
| 130 { | |
| 131 Frame* frame = this->frame(); | |
| 132 ASSERT(frame); | |
| 133 return frame->page(); | |
| 134 } | |
| 135 | |
| 72 } // namespace WebCore | 136 } // namespace WebCore |
| OLD | NEW |