OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) | 2 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) |
3 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. | 3 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 #include "webkit/glue/alt_error_page_resource_fetcher.h" | 140 #include "webkit/glue/alt_error_page_resource_fetcher.h" |
141 #include "webkit/glue/webdocumentloader_impl.h" | 141 #include "webkit/glue/webdocumentloader_impl.h" |
142 #include "webkit/glue/weberror_impl.h" | 142 #include "webkit/glue/weberror_impl.h" |
143 #include "webkit/glue/webframe_impl.h" | 143 #include "webkit/glue/webframe_impl.h" |
144 #include "webkit/glue/webhistoryitem_impl.h" | 144 #include "webkit/glue/webhistoryitem_impl.h" |
145 #include "webkit/glue/webtextinput_impl.h" | 145 #include "webkit/glue/webtextinput_impl.h" |
146 #include "webkit/glue/webview_impl.h" | 146 #include "webkit/glue/webview_impl.h" |
147 #include "webkit/port/page/ChromeClientWin.h" | 147 #include "webkit/port/page/ChromeClientWin.h" |
148 #include "webkit/port/platform/WidgetClientWin.h" | 148 #include "webkit/port/platform/WidgetClientWin.h" |
149 | 149 |
| 150 #if defined(OS_LINUX) |
| 151 #include <gdk/gdk.h> |
| 152 #endif |
| 153 |
150 using WebCore::ChromeClientWin; | 154 using WebCore::ChromeClientWin; |
151 using WebCore::Color; | 155 using WebCore::Color; |
152 using WebCore::Document; | 156 using WebCore::Document; |
153 using WebCore::DocumentFragment; | 157 using WebCore::DocumentFragment; |
154 using WebCore::DocumentLoader; | 158 using WebCore::DocumentLoader; |
155 using WebCore::ExceptionCode; | 159 using WebCore::ExceptionCode; |
156 using WebCore::GraphicsContext; | 160 using WebCore::GraphicsContext; |
157 using WebCore::HTMLFrameOwnerElement; | 161 using WebCore::HTMLFrameOwnerElement; |
158 using WebCore::Frame; | 162 using WebCore::Frame; |
159 using WebCore::FrameLoader; | 163 using WebCore::FrameLoader; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 int to_append = std::min(it.length(), | 241 int to_append = std::min(it.length(), |
238 max_chars - static_cast<int>(output->size())); | 242 max_chars - static_cast<int>(output->size())); |
239 output->append(chars, to_append); | 243 output->append(chars, to_append); |
240 if (output->size() >= static_cast<size_t>(max_chars)) | 244 if (output->size() >= static_cast<size_t>(max_chars)) |
241 return; // Filled up the buffer. | 245 return; // Filled up the buffer. |
242 } | 246 } |
243 } | 247 } |
244 | 248 |
245 // Recursively walk the children. | 249 // Recursively walk the children. |
246 FrameTree* frame_tree = frame->tree(); | 250 FrameTree* frame_tree = frame->tree(); |
247 Frame* cur_child = frame_tree->firstChild(); | |
248 for (Frame* cur_child = frame_tree->firstChild(); cur_child; | 251 for (Frame* cur_child = frame_tree->firstChild(); cur_child; |
249 cur_child = cur_child->tree()->nextSibling()) { | 252 cur_child = cur_child->tree()->nextSibling()) { |
250 // Make sure the frame separator won't fill up the buffer, and give up if | 253 // Make sure the frame separator won't fill up the buffer, and give up if |
251 // it will. The danger is if the separator will make the buffer longer than | 254 // it will. The danger is if the separator will make the buffer longer than |
252 // max_chars. This will cause the computation above: | 255 // max_chars. This will cause the computation above: |
253 // max_chars - output->size() | 256 // max_chars - output->size() |
254 // to be a negative number which will crash when the subframe is added. | 257 // to be a negative number which will crash when the subframe is added. |
255 if (static_cast<int>(output->size()) >= max_chars - kFrameSeparatorLen) | 258 if (static_cast<int>(output->size()) >= max_chars - kFrameSeparatorLen) |
256 return; | 259 return; |
257 | 260 |
(...skipping 12 matching lines...) Expand all Loading... |
270 // Don't complain about using "this" in initializer list. | 273 // Don't complain about using "this" in initializer list. |
271 MSVC_PUSH_DISABLE_WARNING(4355) | 274 MSVC_PUSH_DISABLE_WARNING(4355) |
272 : frame_loader_client_(this), | 275 : frame_loader_client_(this), |
273 scope_matches_factory_(this), | 276 scope_matches_factory_(this), |
274 MSVC_POP_WARNING() | 277 MSVC_POP_WARNING() |
275 currently_loading_request_(NULL), | 278 currently_loading_request_(NULL), |
276 plugin_delegate_(NULL), | 279 plugin_delegate_(NULL), |
277 allows_scrolling_(true), | 280 allows_scrolling_(true), |
278 margin_width_(-1), | 281 margin_width_(-1), |
279 margin_height_(-1), | 282 margin_height_(-1), |
280 last_match_count_(-1), | |
281 total_matchcount_(-1), | |
282 inspected_node_(NULL), | 283 inspected_node_(NULL), |
283 active_tickmark_frame_(NULL), | 284 active_tickmark_frame_(NULL), |
284 active_tickmark_(WidgetClientWin::kNoTickmark), | 285 active_tickmark_(WidgetClientWin::kNoTickmark), |
285 locating_active_rect_(false), | 286 locating_active_rect_(false), |
286 last_active_range_(NULL), | 287 last_active_range_(NULL), |
| 288 last_match_count_(-1), |
| 289 total_matchcount_(-1), |
287 frames_scoping_count_(-1), | 290 frames_scoping_count_(-1), |
288 scoping_complete_(false), | 291 scoping_complete_(false), |
289 next_invalidate_after_(0), | 292 next_invalidate_after_(0), |
290 printing_(false) { | 293 printing_(false) { |
291 StatsCounter(kWebFrameActiveCount).Increment(); | 294 StatsCounter(kWebFrameActiveCount).Increment(); |
292 live_object_count_++; | 295 live_object_count_++; |
293 } | 296 } |
294 | 297 |
295 WebFrameImpl::~WebFrameImpl() { | 298 WebFrameImpl::~WebFrameImpl() { |
296 StatsCounter(kWebFrameActiveCount).Decrement(); | 299 StatsCounter(kWebFrameActiveCount).Decrement(); |
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 std::wstring* text) const { | 719 std::wstring* text) const { |
717 text->clear(); | 720 text->clear(); |
718 if (!frame_) | 721 if (!frame_) |
719 return; | 722 return; |
720 | 723 |
721 FrameContentAsPlainText(max_chars, frame_.get(), text); | 724 FrameContentAsPlainText(max_chars, frame_.get(), text); |
722 } | 725 } |
723 | 726 |
724 void WebFrameImpl::InvalidateArea(AreaToInvalidate area) { | 727 void WebFrameImpl::InvalidateArea(AreaToInvalidate area) { |
725 ASSERT(frame() && frame()->view()); | 728 ASSERT(frame() && frame()->view()); |
| 729 #if defined(OS_WIN) |
| 730 // TODO(pinkerton): Fix Mac invalidation to be more like Win ScrollView |
726 FrameView* view = frame()->view(); | 731 FrameView* view = frame()->view(); |
727 | 732 |
728 #if defined(OS_WIN) | |
729 // TODO(pinkerton): Fix Mac invalidation to be more like Win ScrollView | |
730 if ((area & INVALIDATE_ALL) == INVALIDATE_ALL) { | 733 if ((area & INVALIDATE_ALL) == INVALIDATE_ALL) { |
731 view->addToDirtyRegion(view->frameGeometry()); | 734 view->addToDirtyRegion(view->frameGeometry()); |
732 } else { | 735 } else { |
733 if ((area & INVALIDATE_CONTENT_AREA) == INVALIDATE_CONTENT_AREA) { | 736 if ((area & INVALIDATE_CONTENT_AREA) == INVALIDATE_CONTENT_AREA) { |
734 IntRect content_area(view->x(), | 737 IntRect content_area(view->x(), |
735 view->y(), | 738 view->y(), |
736 view->visibleWidth(), | 739 view->visibleWidth(), |
737 view->visibleHeight()); | 740 view->visibleHeight()); |
738 view->addToDirtyRegion(content_area); | 741 view->addToDirtyRegion(content_area); |
739 } | 742 } |
740 | 743 |
741 if ((area & INVALIDATE_SCROLLBAR) == INVALIDATE_SCROLLBAR) { | 744 if ((area & INVALIDATE_SCROLLBAR) == INVALIDATE_SCROLLBAR) { |
742 // Invalidate the vertical scroll bar region for the view. | 745 // Invalidate the vertical scroll bar region for the view. |
743 IntRect scroll_bar_vert(view->x() + view->visibleWidth(), | 746 IntRect scroll_bar_vert(view->x() + view->visibleWidth(), |
744 view->y(), | 747 view->y(), |
745 PlatformScrollbar::verticalScrollbarWidth(), | 748 PlatformScrollbar::verticalScrollbarWidth(), |
746 view->visibleHeight()); | 749 view->visibleHeight()); |
747 view->addToDirtyRegion(scroll_bar_vert); | 750 view->addToDirtyRegion(scroll_bar_vert); |
748 } | 751 } |
749 } | 752 } |
750 #endif | 753 #endif |
751 } | 754 } |
752 | 755 |
753 void WebFrameImpl::InvalidateTickmark(RefPtr<WebCore::Range> tickmark) { | 756 void WebFrameImpl::InvalidateTickmark(RefPtr<WebCore::Range> tickmark) { |
754 ASSERT(frame() && frame()->view()); | 757 ASSERT(frame() && frame()->view()); |
| 758 #if defined(OS_WIN) |
| 759 // TODO(pinkerton): Fix Mac invalidation to be more like Win ScrollView |
755 FrameView* view = frame()->view(); | 760 FrameView* view = frame()->view(); |
756 | 761 |
757 #if defined(OS_WIN) | |
758 // TODO(pinkerton): Fix Mac invalidation to be more like Win ScrollView | |
759 IntRect pos = tickmark->boundingBox(); | 762 IntRect pos = tickmark->boundingBox(); |
760 pos.move(-view->contentsX(), -view->contentsY()); | 763 pos.move(-view->contentsX(), -view->contentsY()); |
761 view->addToDirtyRegion(pos); | 764 view->addToDirtyRegion(pos); |
762 #endif | 765 #endif |
763 } | 766 } |
764 | 767 |
765 void WebFrameImpl::IncreaseMatchCount(int count, int request_id) { | 768 void WebFrameImpl::IncreaseMatchCount(int count, int request_id) { |
766 total_matchcount_ += count; | 769 total_matchcount_ += count; |
767 | 770 |
768 // Update the UI with the latest findings. | 771 // Update the UI with the latest findings. |
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1484 GraphicsContext gc(reinterpret_cast<PlatformGraphicsContext*>(&context)); | 1487 GraphicsContext gc(reinterpret_cast<PlatformGraphicsContext*>(&context)); |
1485 #endif | 1488 #endif |
1486 if (frame_->document() && frameview()) { | 1489 if (frame_->document() && frameview()) { |
1487 frameview()->paint(&gc, dirty_rect); | 1490 frameview()->paint(&gc, dirty_rect); |
1488 } else { | 1491 } else { |
1489 gc.fillRect(dirty_rect, Color::white); | 1492 gc.fillRect(dirty_rect, Color::white); |
1490 } | 1493 } |
1491 } | 1494 } |
1492 } | 1495 } |
1493 | 1496 |
| 1497 // TODO(tc): Merge these as they are almost identical across platforms. |
1494 #if defined(OS_WIN) | 1498 #if defined(OS_WIN) |
1495 gfx::BitmapPlatformDevice WebFrameImpl::CaptureImage(bool scroll_to_zero) { | 1499 gfx::BitmapPlatformDevice WebFrameImpl::CaptureImage(bool scroll_to_zero) { |
1496 // Must layout before painting. | 1500 // Must layout before painting. |
1497 Layout(); | 1501 Layout(); |
1498 | 1502 |
1499 gfx::PlatformCanvasWin canvas(frameview()->width(), frameview()->height(), tru
e); | 1503 gfx::PlatformCanvasWin canvas(frameview()->width(), frameview()->height(), tru
e); |
1500 PlatformContextSkia context(&canvas); | 1504 PlatformContextSkia context(&canvas); |
1501 | 1505 |
1502 GraphicsContext gc(reinterpret_cast<PlatformGraphicsContext*>(&context)); | 1506 GraphicsContext gc(reinterpret_cast<PlatformGraphicsContext*>(&context)); |
1503 frameview()->paint(&gc, IntRect(0, 0, frameview()->width(), | 1507 frameview()->paint(&gc, IntRect(0, 0, frameview()->width(), |
(...skipping 16 matching lines...) Expand all Loading... |
1520 frameview()->paint(&gc, IntRect(0, 0, frameview()->width(), | 1524 frameview()->paint(&gc, IntRect(0, 0, frameview()->width(), |
1521 frameview()->height())); | 1525 frameview()->height())); |
1522 canvas.endPlatformPaint(); | 1526 canvas.endPlatformPaint(); |
1523 | 1527 |
1524 gfx::BitmapPlatformDevice& device = | 1528 gfx::BitmapPlatformDevice& device = |
1525 static_cast<gfx::BitmapPlatformDevice&>(canvas.getTopPlatformDevice()); | 1529 static_cast<gfx::BitmapPlatformDevice&>(canvas.getTopPlatformDevice()); |
1526 return device; | 1530 return device; |
1527 } | 1531 } |
1528 #else | 1532 #else |
1529 gfx::BitmapPlatformDevice WebFrameImpl::CaptureImage(bool scroll_to_zero) { | 1533 gfx::BitmapPlatformDevice WebFrameImpl::CaptureImage(bool scroll_to_zero) { |
1530 NOTIMPLEMENTED(); | 1534 // Must layout before painting. |
| 1535 Layout(); |
| 1536 |
| 1537 gfx::PlatformCanvasLinux canvas(frameview()->width(), frameview()->height(), |
| 1538 true); |
| 1539 PlatformContextSkia context(&canvas); |
| 1540 |
| 1541 GraphicsContext gc(reinterpret_cast<PlatformGraphicsContext*>(&context)); |
| 1542 frameview()->paint(&gc, IntRect(0, 0, frameview()->width(), |
| 1543 frameview()->height())); |
| 1544 |
| 1545 gfx::BitmapPlatformDevice& device = |
| 1546 static_cast<gfx::BitmapPlatformDevice&>(canvas.getTopPlatformDevice()); |
| 1547 return device; |
1531 } | 1548 } |
1532 #endif | 1549 #endif |
1533 | 1550 |
1534 bool WebFrameImpl::IsLoading() { | 1551 bool WebFrameImpl::IsLoading() { |
1535 // I'm assuming this does what we want. | 1552 // I'm assuming this does what we want. |
1536 return frame_->loader()->isLoading(); | 1553 return frame_->loader()->isLoading(); |
1537 } | 1554 } |
1538 | 1555 |
1539 void WebFrameImpl::Closing() { | 1556 void WebFrameImpl::Closing() { |
1540 // let go of our references, this breaks reference cycles and will | 1557 // let go of our references, this breaks reference cycles and will |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1879 if (loader) { | 1896 if (loader) { |
1880 return WebCore::FrameLoadTypeReloadAllowingStaleData == | 1897 return WebCore::FrameLoadTypeReloadAllowingStaleData == |
1881 loader->policyLoadType(); | 1898 loader->policyLoadType(); |
1882 } | 1899 } |
1883 return false; | 1900 return false; |
1884 } | 1901 } |
1885 | 1902 |
1886 int WebFrameImpl::PendingFrameUnloadEventCount() const { | 1903 int WebFrameImpl::PendingFrameUnloadEventCount() const { |
1887 return frame()->eventHandler()->pendingFrameUnloadEventCount(); | 1904 return frame()->eventHandler()->pendingFrameUnloadEventCount(); |
1888 } | 1905 } |
OLD | NEW |