mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	- Remove CefNavigationEntry::GetFrameName() (see http://crbug.com/477150#c5). - Devirtualize base::BindState (see http://crbug.com/486594). - Move Tuple to the base namespace.
		
			
				
	
	
		
			140 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright (c) 2012 The Chromium Embedded Framework Authors.
 | 
						|
// Portions copyright (c) 2011 The Chromium Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style license that can be
 | 
						|
// found in the LICENSE file.
 | 
						|
 | 
						|
// MSVC++ requires this to be set before any other includes to get M_PI.
 | 
						|
// Otherwise there will be compile errors in wtf/MathExtras.h.
 | 
						|
#define _USE_MATH_DEFINES
 | 
						|
 | 
						|
// Defines required to access Blink internals (unwrap WebNode).
 | 
						|
#undef BLINK_IMPLEMENTATION
 | 
						|
#define BLINK_IMPLEMENTATION 1
 | 
						|
#undef INSIDE_BLINK
 | 
						|
#define INSIDE_BLINK 1
 | 
						|
 | 
						|
#include "libcef/renderer/webkit_glue.h"
 | 
						|
 | 
						|
#include "base/compiler_specific.h"
 | 
						|
 | 
						|
#include "config.h"
 | 
						|
MSVC_PUSH_WARNING_LEVEL(0);
 | 
						|
#include "third_party/WebKit/public/platform/WebString.h"
 | 
						|
#include "third_party/WebKit/public/web/WebDocument.h"
 | 
						|
#include "third_party/WebKit/public/web/WebElement.h"
 | 
						|
#include "third_party/WebKit/public/web/WebNode.h"
 | 
						|
#include "third_party/WebKit/public/web/WebViewClient.h"
 | 
						|
 | 
						|
#include "third_party/WebKit/Source/core/css/parser/CSSParser.h"
 | 
						|
#include "third_party/WebKit/Source/core/dom/Node.h"
 | 
						|
#include "third_party/WebKit/Source/web/WebLocalFrameImpl.h"
 | 
						|
#include "third_party/WebKit/Source/web/WebViewImpl.h"
 | 
						|
MSVC_POP_WARNING();
 | 
						|
#undef LOG
 | 
						|
 | 
						|
#include "base/logging.h"
 | 
						|
#include "content/public/renderer/render_frame.h"
 | 
						|
 | 
						|
namespace webkit_glue {
 | 
						|
 | 
						|
const int64 kInvalidFrameId = -1;
 | 
						|
 | 
						|
bool CanGoBack(blink::WebView* view) {
 | 
						|
  if (!view)
 | 
						|
    return false;
 | 
						|
  blink::WebViewImpl* impl = reinterpret_cast<blink::WebViewImpl*>(view);
 | 
						|
  return (impl->client()->historyBackListCount() > 0);
 | 
						|
}
 | 
						|
 | 
						|
bool CanGoForward(blink::WebView* view) {
 | 
						|
  if (!view)
 | 
						|
    return false;
 | 
						|
  blink::WebViewImpl* impl = reinterpret_cast<blink::WebViewImpl*>(view);
 | 
						|
  return (impl->client()->historyForwardListCount() > 0);
 | 
						|
}
 | 
						|
 | 
						|
void GoBack(blink::WebView* view) {
 | 
						|
  if (!view)
 | 
						|
    return;
 | 
						|
  blink::WebViewImpl* impl = reinterpret_cast<blink::WebViewImpl*>(view);
 | 
						|
  if (impl->client()->historyBackListCount() > 0)
 | 
						|
    impl->client()->navigateBackForwardSoon(-1);
 | 
						|
}
 | 
						|
 | 
						|
void GoForward(blink::WebView* view) {
 | 
						|
  if (!view)
 | 
						|
    return;
 | 
						|
  blink::WebViewImpl* impl = reinterpret_cast<blink::WebViewImpl*>(view);
 | 
						|
 if (impl->client()->historyForwardListCount() > 0)
 | 
						|
    impl->client()->navigateBackForwardSoon(1);
 | 
						|
}
 | 
						|
 | 
						|
std::string DumpDocumentText(blink::WebFrame* frame) {
 | 
						|
  // We use the document element's text instead of the body text here because
 | 
						|
  // not all documents have a body, such as XML documents.
 | 
						|
  blink::WebElement document_element = frame->document().documentElement();
 | 
						|
  if (document_element.isNull())
 | 
						|
    return std::string();
 | 
						|
 | 
						|
  return document_element.textContent().utf8();
 | 
						|
}
 | 
						|
 | 
						|
bool SetNodeValue(blink::WebNode& node, const blink::WebString& value) {
 | 
						|
  blink::Node* web_node = node.unwrap<blink::Node>();
 | 
						|
  web_node->setNodeValue(value);
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
int64 GetIdentifier(blink::WebFrame* frame) {
 | 
						|
  // Each WebFrame will have an associated RenderFrame. The RenderFrame
 | 
						|
  // routing IDs are unique within a given renderer process.
 | 
						|
  content::RenderFrame* render_frame =
 | 
						|
      content::RenderFrame::FromWebFrame(frame);
 | 
						|
  DCHECK(render_frame);
 | 
						|
  if (render_frame)
 | 
						|
    return render_frame->GetRoutingID();
 | 
						|
  return kInvalidFrameId;
 | 
						|
}
 | 
						|
 | 
						|
// Based on WebViewImpl::findFrameByName and FrameTree::find.
 | 
						|
blink::WebFrame* FindFrameByUniqueName(const blink::WebString& unique_name,
 | 
						|
                                       blink::WebFrame* relative_to_frame) {
 | 
						|
  blink::Frame* start_frame = toWebLocalFrameImpl(relative_to_frame)->frame();
 | 
						|
  if (!start_frame)
 | 
						|
    return NULL;
 | 
						|
 | 
						|
  const AtomicString& atomic_name = unique_name;
 | 
						|
  blink::Frame* found_frame = NULL;
 | 
						|
 | 
						|
  // Search the subtree starting with |start_frame|.
 | 
						|
  for (blink::Frame* frame = start_frame;
 | 
						|
       frame;
 | 
						|
       frame = frame->tree().traverseNext(start_frame)) {
 | 
						|
    if (frame->tree().uniqueName() == atomic_name) {
 | 
						|
      found_frame = frame;
 | 
						|
      break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (found_frame && found_frame->isLocalFrame())
 | 
						|
    return blink::WebLocalFrameImpl::fromFrame(toLocalFrame(found_frame));
 | 
						|
 | 
						|
  return NULL;
 | 
						|
}
 | 
						|
 | 
						|
bool ParseCSSColor(const blink::WebString& string, bool strict, SkColor& color) {
 | 
						|
  blink::RGBA32 rgba_color =
 | 
						|
      blink::makeRGBA(SkColorGetR(color), SkColorGetG(color),
 | 
						|
                      SkColorGetB(color), SkColorGetA(color));
 | 
						|
  if (!blink::CSSParser::parseColor(rgba_color, string, strict))
 | 
						|
    return false;
 | 
						|
 | 
						|
  color = SkColorSetARGB(blink::alphaChannel(rgba_color),
 | 
						|
                         blink::redChannel(rgba_color),
 | 
						|
                         blink::greenChannel(rgba_color),
 | 
						|
                         blink::blueChannel(rgba_color));
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
}  // webkit_glue
 |