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

Unified Diff: Source/core/frame/LocalDOMWindow.cpp

Issue 1135633004: Revert of Make createWindow (mostly) work with OOPIF (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 7 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 | « Source/core/frame/LocalDOMWindow.h ('k') | Source/core/frame/Screen.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/frame/LocalDOMWindow.cpp
diff --git a/Source/core/frame/LocalDOMWindow.cpp b/Source/core/frame/LocalDOMWindow.cpp
index 4dda8ed382ca514fec54a0287ed03b5aef0f5a9e..6934f4b2610fa44618642dbf6680c2ade8beae9f 100644
--- a/Source/core/frame/LocalDOMWindow.cpp
+++ b/Source/core/frame/LocalDOMWindow.cpp
@@ -71,6 +71,10 @@
#include "platform/EventDispatchForbiddenScope.h"
#include "platform/PlatformScreen.h"
#include "public/platform/Platform.h"
+#include <algorithm>
+
+using std::min;
+using std::max;
namespace blink {
@@ -247,6 +251,33 @@
unsigned LocalDOMWindow::pendingUnloadEventListeners() const
{
return windowsWithUnloadEventListeners().count(const_cast<LocalDOMWindow*>(this));
+}
+
+// This function:
+// 1) Constrains the window rect to the minimum window size and no bigger than the int rect's dimensions.
+// 2) Constrains the window rect to within the top and left boundaries of the available screen rect.
+// 3) Constrains the window rect to within the bottom and right boundaries of the available screen rect.
+// 4) Translate the window rect coordinates to be within the coordinate space of the screen.
+IntRect LocalDOMWindow::adjustWindowRect(LocalFrame& frame, const IntRect& pendingChanges)
+{
+ FrameHost* host = frame.host();
+ ASSERT(host);
+
+ IntRect screen = screenAvailableRect(frame.view());
+ IntRect window = pendingChanges;
+
+ IntSize minimumSize = host->chrome().client().minimumWindowSize();
+ // Let size 0 pass through, since that indicates default size, not minimum size.
+ if (window.width())
+ window.setWidth(min(max(minimumSize.width(), window.width()), screen.width()));
+ if (window.height())
+ window.setHeight(min(max(minimumSize.height(), window.height()), screen.height()));
+
+ // Constrain the window position within the valid screen area.
+ window.setX(max(screen.x(), min(window.x(), screen.maxX() - window.width())));
+ window.setY(max(screen.y(), min(window.y(), screen.maxY() - window.height())));
+
+ return window;
}
bool LocalDOMWindow::allowPopUp(LocalFrame& firstFrame)
@@ -1259,7 +1290,7 @@
IntRect windowRect = host->chrome().windowRect();
windowRect.move(x, y);
// Security check (the spec talks about UniversalBrowserWrite to disable this check...)
- host->chrome().setWindowRect(windowRect);
+ host->chrome().setWindowRect(adjustWindowRect(*frame(), windowRect));
}
void LocalDOMWindow::moveTo(int x, int y, bool hasX, bool hasY) const
@@ -1277,7 +1308,7 @@
IntRect windowRect = host->chrome().windowRect();
windowRect.setLocation(IntPoint(hasX ? x : windowRect.x(), hasY ? y : windowRect.y()));
// Security check (the spec talks about UniversalBrowserWrite to disable this check...)
- host->chrome().setWindowRect(windowRect);
+ host->chrome().setWindowRect(adjustWindowRect(*frame(), windowRect));
}
void LocalDOMWindow::resizeBy(int x, int y, bool hasX, bool hasY) const
@@ -1295,7 +1326,7 @@
IntRect fr = host->chrome().windowRect();
IntSize dest = fr.size() + IntSize(x, y);
IntRect update(fr.location(), dest);
- host->chrome().setWindowRect(update);
+ host->chrome().setWindowRect(adjustWindowRect(*frame(), update));
}
void LocalDOMWindow::resizeTo(int width, int height, bool hasWidth, bool hasHeight) const
@@ -1313,7 +1344,7 @@
IntRect fr = host->chrome().windowRect();
IntSize dest = IntSize(hasWidth ? width : fr.width(), hasHeight ? height : fr.height());
IntRect update(fr.location(), dest);
- host->chrome().setWindowRect(update);
+ host->chrome().setWindowRect(adjustWindowRect(*frame(), update));
}
int LocalDOMWindow::requestAnimationFrame(FrameRequestCallback* callback)
@@ -1521,7 +1552,7 @@
}
WindowFeatures windowFeatures(windowFeaturesString);
- Frame* result = createWindow(urlString, frameName, windowFeatures, *callingWindow, *firstFrame, *frame());
+ LocalFrame* result = createWindow(urlString, frameName, windowFeatures, *callingWindow, *firstFrame, *frame());
return result ? result->domWindow() : nullptr;
}
« no previous file with comments | « Source/core/frame/LocalDOMWindow.h ('k') | Source/core/frame/Screen.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698