Chromium Code Reviews| Index: Source/modules/screen_orientation/ScreenOrientationController.cpp |
| diff --git a/Source/modules/screen_orientation/ScreenOrientationController.cpp b/Source/modules/screen_orientation/ScreenOrientationController.cpp |
| index 65adbf279560cb2eac5f8f5658391f351098dcc8..54dbe1c81abd3bffd092a7a374ea888bc5347188 100644 |
| --- a/Source/modules/screen_orientation/ScreenOrientationController.cpp |
| +++ b/Source/modules/screen_orientation/ScreenOrientationController.cpp |
| @@ -22,21 +22,22 @@ ScreenOrientationController::~ScreenOrientationController() |
| { |
| } |
| -void ScreenOrientationController::provideTo(Page& page, blink::WebScreenOrientationClient* client) |
| +void ScreenOrientationController::provideTo(LocalFrame& frame, blink::WebScreenOrientationClient* client) |
| { |
| - ScreenOrientationController* controller = new ScreenOrientationController(page, client); |
| - WillBeHeapSupplement<Page>::provideTo(page, supplementName(), adoptPtrWillBeNoop(controller)); |
| + ScreenOrientationController* controller = new ScreenOrientationController(frame, client); |
| + WillBeHeapSupplement<LocalFrame>::provideTo(frame, supplementName(), adoptPtrWillBeNoop(controller)); |
| } |
| -ScreenOrientationController& ScreenOrientationController::from(Page& page) |
| +ScreenOrientationController& ScreenOrientationController::from(LocalFrame& frame) |
| { |
| - return *static_cast<ScreenOrientationController*>(WillBeHeapSupplement<Page>::from(page, supplementName())); |
| + return *static_cast<ScreenOrientationController*>(WillBeHeapSupplement<LocalFrame>::from(frame, supplementName())); |
| } |
| -ScreenOrientationController::ScreenOrientationController(Page& page, blink::WebScreenOrientationClient* client) |
| - : PageLifecycleObserver(&page) |
| +ScreenOrientationController::ScreenOrientationController(LocalFrame& frame, blink::WebScreenOrientationClient* client) |
| + : PageLifecycleObserver(frame.page()) |
| , m_overrideOrientation(blink::WebScreenOrientationUndefined) |
| , m_client(client) |
| + , m_frame(frame) |
| { |
| } |
| @@ -77,9 +78,13 @@ void ScreenOrientationController::pageVisibilityChanged() |
| if (page() && page()->visibilityState() == PageVisibilityStateVisible) { |
| blink::WebScreenOrientationType oldOrientation = m_overrideOrientation; |
| m_overrideOrientation = blink::WebScreenOrientationUndefined; |
| - LocalFrame* mainFrame = page()->mainFrame(); |
| - if (mainFrame && oldOrientation != orientation()) |
| - mainFrame->sendOrientationChangeEvent(); |
| + // FIXME: sendOrientationChangeEvent() currently send an event all the |
| + // children of the frame, so it should only be called on the frame on |
| + // top of the tree. We would need the embedder to call |
| + // sendOrientationChangeEvent on every WebFrame part of a WebView to be |
| + // able to remove this. |
| + if (m_frame.localFrameRoot() == &m_frame && oldOrientation != orientation()) |
|
Inactive
2014/06/10 14:48:48
nit: this '&' should not be needed due to DEFINE_C
mlamouri (slow - plz ping)
2014/06/10 16:27:23
This is working. The name of that macro can't be m
|
| + m_frame.sendOrientationChangeEvent(); |
| } else if (m_overrideOrientation == blink::WebScreenOrientationUndefined) { |
| // The page is no longer visible, store the last know screen orientation |
| // so that we keep returning this orientation until the page becomes |
| @@ -96,13 +101,10 @@ blink::WebScreenOrientationType ScreenOrientationController::orientation() const |
| return m_overrideOrientation; |
| } |
| - LocalFrame* mainFrame = page() ? page()->mainFrame() : 0; |
| - if (!mainFrame) |
| - return blink::WebScreenOrientationPortraitPrimary; |
| - blink::WebScreenOrientationType orientationType = screenOrientationType(mainFrame->view()); |
| + blink::WebScreenOrientationType orientationType = screenOrientationType(m_frame.view()); |
| if (orientationType == blink::WebScreenOrientationUndefined) { |
| // The embedder could not provide us with an orientation, deduce it ourselves. |
| - orientationType = computeOrientation(mainFrame->view()); |
| + orientationType = computeOrientation(m_frame.view()); |
| } |
| ASSERT(orientationType != blink::WebScreenOrientationUndefined); |
| return orientationType; |