OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2000 Simon Hausmann (hausmann@kde.org) | 4 * (C) 2000 Simon Hausmann (hausmann@kde.org) |
5 * (C) 2001 Dirk Mueller (mueller@kde.org) | 5 * (C) 2001 Dirk Mueller (mueller@kde.org) |
6 * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 Frame* frame = document->frame(); | 198 Frame* frame = document->frame(); |
199 float zoomFactor = frame->pageZoomFactor(); | 199 float zoomFactor = frame->pageZoomFactor(); |
200 if (zoomFactor == 1) | 200 if (zoomFactor == 1) |
201 return value; | 201 return value; |
202 // Needed because of truncation (rather than rounding) when scaling up. | 202 // Needed because of truncation (rather than rounding) when scaling up. |
203 if (zoomFactor > 1) | 203 if (zoomFactor > 1) |
204 value++; | 204 value++; |
205 return static_cast<int>(value / zoomFactor); | 205 return static_cast<int>(value / zoomFactor); |
206 } | 206 } |
207 | 207 |
| 208 // FIXME: There are cases where body.scrollLeft is allowed to return |
| 209 // non-zero values in both quirks and strict mode. It happens when |
| 210 // <body> has an overflow that is not the Frame overflow. |
| 211 // http://dev.w3.org/csswg/cssom-view/#dom-element-scrollleft |
| 212 // http://code.google.com/p/chromium/issues/detail?id=312435 |
208 int HTMLBodyElement::scrollLeft() | 213 int HTMLBodyElement::scrollLeft() |
209 { | 214 { |
210 Document& document = this->document(); | 215 Document& document = this->document(); |
| 216 document.updateLayoutIgnorePendingStylesheets(); |
211 | 217 |
212 // FIXME: There are cases where body.scrollLeft is allowed to return | 218 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { |
213 // non-zero values in both quirks and strict mode. It happens when | 219 if (!document.inQuirksMode()) |
214 // <body> has an overflow that is not the Frame overflow. | 220 return 0; |
215 // http://dev.w3.org/csswg/cssom-view/#dom-element-scrollleft | 221 } |
216 if (!document.inQuirksMode()) | |
217 UseCounter::countDeprecation(&document, UseCounter::ScrollLeftBodyNotQui
rksMode); | |
218 | 222 |
219 document.updateLayoutIgnorePendingStylesheets(); | |
220 FrameView* view = document.view(); | 223 FrameView* view = document.view(); |
221 return view ? adjustForZoom(view->scrollX(), &document) : 0; | 224 return view ? adjustForZoom(view->scrollX(), &document) : 0; |
222 } | 225 } |
223 | 226 |
224 void HTMLBodyElement::setScrollLeft(int scrollLeft) | 227 void HTMLBodyElement::setScrollLeft(int scrollLeft) |
225 { | 228 { |
226 Document& document = this->document(); | 229 Document& document = this->document(); |
| 230 document.updateLayoutIgnorePendingStylesheets(); |
227 | 231 |
228 if (!document.inQuirksMode()) | 232 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { |
229 UseCounter::countDeprecation(&document, UseCounter::ScrollLeftBodyNotQui
rksMode); | 233 if (!document.inQuirksMode()) |
| 234 return; |
| 235 } |
230 | 236 |
231 document.updateLayoutIgnorePendingStylesheets(); | |
232 Frame* frame = document.frame(); | 237 Frame* frame = document.frame(); |
233 if (!frame) | 238 if (!frame) |
234 return; | 239 return; |
235 FrameView* view = frame->view(); | 240 FrameView* view = frame->view(); |
236 if (!view) | 241 if (!view) |
237 return; | 242 return; |
238 view->setScrollPosition(IntPoint(static_cast<int>(scrollLeft * frame->pageZo
omFactor()), view->scrollY())); | 243 view->setScrollPosition(IntPoint(static_cast<int>(scrollLeft * frame->pageZo
omFactor()), view->scrollY())); |
239 } | 244 } |
240 | 245 |
241 int HTMLBodyElement::scrollTop() | 246 int HTMLBodyElement::scrollTop() |
242 { | 247 { |
243 Document& document = this->document(); | 248 Document& document = this->document(); |
| 249 document.updateLayoutIgnorePendingStylesheets(); |
244 | 250 |
245 // FIXME: There are cases where body.scrollTop is allowed to return | 251 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { |
246 // non-zero values in both quirks and strict mode. It happens when | 252 if (!document.inQuirksMode()) |
247 // body has a overflow that is not the Frame overflow. | 253 return 0; |
248 // http://dev.w3.org/csswg/cssom-view/#dom-element-scrolltop | 254 } |
249 if (!document.inQuirksMode()) | |
250 UseCounter::countDeprecation(&document, UseCounter::ScrollTopBodyNotQuir
ksMode); | |
251 | 255 |
252 document.updateLayoutIgnorePendingStylesheets(); | |
253 FrameView* view = document.view(); | 256 FrameView* view = document.view(); |
254 return view ? adjustForZoom(view->scrollY(), &document) : 0; | 257 return view ? adjustForZoom(view->scrollY(), &document) : 0; |
255 } | 258 } |
256 | 259 |
257 void HTMLBodyElement::setScrollTop(int scrollTop) | 260 void HTMLBodyElement::setScrollTop(int scrollTop) |
258 { | 261 { |
259 Document& document = this->document(); | 262 Document& document = this->document(); |
| 263 document.updateLayoutIgnorePendingStylesheets(); |
260 | 264 |
261 if (!document.inQuirksMode()) | 265 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { |
262 UseCounter::countDeprecation(&document, UseCounter::ScrollTopBodyNotQuir
ksMode); | 266 if (!document.inQuirksMode()) |
| 267 return; |
| 268 } |
263 | 269 |
264 document.updateLayoutIgnorePendingStylesheets(); | |
265 Frame* frame = document.frame(); | 270 Frame* frame = document.frame(); |
266 if (!frame) | 271 if (!frame) |
267 return; | 272 return; |
268 FrameView* view = frame->view(); | 273 FrameView* view = frame->view(); |
269 if (!view) | 274 if (!view) |
270 return; | 275 return; |
271 view->setScrollPosition(IntPoint(view->scrollX(), static_cast<int>(scrollTop
* frame->pageZoomFactor()))); | 276 view->setScrollPosition(IntPoint(view->scrollX(), static_cast<int>(scrollTop
* frame->pageZoomFactor()))); |
272 } | 277 } |
273 | 278 |
274 int HTMLBodyElement::scrollHeight() | 279 int HTMLBodyElement::scrollHeight() |
(...skipping 15 matching lines...) Expand all Loading... |
290 } | 295 } |
291 | 296 |
292 void HTMLBodyElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const | 297 void HTMLBodyElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const |
293 { | 298 { |
294 HTMLElement::addSubresourceAttributeURLs(urls); | 299 HTMLElement::addSubresourceAttributeURLs(urls); |
295 | 300 |
296 addSubresourceURL(urls, document().completeURL(getAttribute(backgroundAttr))
); | 301 addSubresourceURL(urls, document().completeURL(getAttribute(backgroundAttr))
); |
297 } | 302 } |
298 | 303 |
299 } // namespace WebCore | 304 } // namespace WebCore |
OLD | NEW |