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

Side by Side Diff: Source/core/inspector/InspectorDOMAgent.cpp

Issue 22923010: DevTools: Add CSS.getPlatformFontsForNode in protocol.json (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2011 Google Inc. All rights reserved.
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 15 matching lines...) Expand all
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "core/inspector/InspectorDOMAgent.h" 32 #include "core/inspector/InspectorDOMAgent.h"
33 33
34 #include "HTMLNames.h" 34 #include "HTMLNames.h"
35 #include "InspectorFrontend.h" 35 #include "InspectorFrontend.h"
36 #include "SkTypeface.h"
36 #include "bindings/v8/ExceptionState.h" 37 #include "bindings/v8/ExceptionState.h"
37 #include "bindings/v8/ScriptEventListener.h" 38 #include "bindings/v8/ScriptEventListener.h"
38 #include "core/dom/Attr.h" 39 #include "core/dom/Attr.h"
39 #include "core/dom/CharacterData.h" 40 #include "core/dom/CharacterData.h"
40 #include "core/dom/ContainerNode.h" 41 #include "core/dom/ContainerNode.h"
41 #include "core/dom/DOMException.h" 42 #include "core/dom/DOMException.h"
42 #include "core/dom/Document.h" 43 #include "core/dom/Document.h"
43 #include "core/dom/DocumentFragment.h" 44 #include "core/dom/DocumentFragment.h"
44 #include "core/dom/DocumentType.h" 45 #include "core/dom/DocumentType.h"
45 #include "core/dom/Element.h" 46 #include "core/dom/Element.h"
(...skipping 20 matching lines...) Expand all
66 #include "core/inspector/InspectorPageAgent.h" 67 #include "core/inspector/InspectorPageAgent.h"
67 #include "core/inspector/InspectorState.h" 68 #include "core/inspector/InspectorState.h"
68 #include "core/inspector/InstrumentingAgents.h" 69 #include "core/inspector/InstrumentingAgents.h"
69 #include "core/loader/DocumentLoader.h" 70 #include "core/loader/DocumentLoader.h"
70 #include "core/page/Frame.h" 71 #include "core/page/Frame.h"
71 #include "core/page/FrameTree.h" 72 #include "core/page/FrameTree.h"
72 #include "core/page/Page.h" 73 #include "core/page/Page.h"
73 #include "core/platform/PlatformGestureEvent.h" 74 #include "core/platform/PlatformGestureEvent.h"
74 #include "core/platform/PlatformMouseEvent.h" 75 #include "core/platform/PlatformMouseEvent.h"
75 #include "core/platform/PlatformTouchEvent.h" 76 #include "core/platform/PlatformTouchEvent.h"
77 #include "core/platform/graphics/Font.h"
78 #include "core/platform/graphics/GlyphBuffer.h"
79 #include "core/platform/graphics/TextRun.h"
80 #include "core/platform/graphics/WidthIterator.h"
76 #include "core/rendering/HitTestResult.h" 81 #include "core/rendering/HitTestResult.h"
82 #include "core/rendering/InlineTextBox.h"
83 #include "core/rendering/RenderObject.h"
84 #include "core/rendering/RenderText.h"
85 #include "core/rendering/RenderTextFragment.h"
77 #include "core/rendering/RenderView.h" 86 #include "core/rendering/RenderView.h"
87 #include "core/rendering/style/RenderStyle.h"
78 #include "core/xml/DocumentXPathEvaluator.h" 88 #include "core/xml/DocumentXPathEvaluator.h"
79 #include "core/xml/XPathResult.h" 89 #include "core/xml/XPathResult.h"
80 #include "wtf/HashSet.h" 90 #include "wtf/HashSet.h"
81 #include "wtf/ListHashSet.h" 91 #include "wtf/ListHashSet.h"
82 #include "wtf/OwnPtr.h" 92 #include "wtf/OwnPtr.h"
83 #include "wtf/Vector.h" 93 #include "wtf/Vector.h"
84 #include "wtf/text/CString.h" 94 #include "wtf/text/CString.h"
85 #include "wtf/text/WTFString.h" 95 #include "wtf/text/WTFString.h"
86 96
87 namespace WebCore { 97 namespace WebCore {
(...skipping 1130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 Frame* frame = m_pageAgent->frameForId(frameId); 1228 Frame* frame = m_pageAgent->frameForId(frameId);
1219 if (frame && frame->ownerElement()) { 1229 if (frame && frame->ownerElement()) {
1220 OwnPtr<HighlightConfig> highlightConfig = adoptPtr(new HighlightConfig() ); 1230 OwnPtr<HighlightConfig> highlightConfig = adoptPtr(new HighlightConfig() );
1221 highlightConfig->showInfo = true; // Always show tooltips for frames. 1231 highlightConfig->showInfo = true; // Always show tooltips for frames.
1222 highlightConfig->content = parseColor(color); 1232 highlightConfig->content = parseColor(color);
1223 highlightConfig->contentOutline = parseColor(outlineColor); 1233 highlightConfig->contentOutline = parseColor(outlineColor);
1224 m_overlay->highlightNode(frame->ownerElement(), 0 /* eventTarget */, *hi ghlightConfig); 1234 m_overlay->highlightNode(frame->ownerElement(), 0 /* eventTarget */, *hi ghlightConfig);
1225 } 1235 }
1226 } 1236 }
1227 1237
1238 String InspectorDOMAgent::familyNameFromSimpleFontData(const SimpleFontData* fon tData)
pfeldman 2013/08/16 08:16:48 make it static
1239 {
1240 FontPlatformData platformData = fontData->platformData();
1241 SkTypeface::LocalizedStrings* fontFamilyIterator = platformData.typeface()-> createFamilyNameIterator();
pfeldman 2013/08/16 08:16:48 No, you can't use Sk here.
1242 SkTypeface::LocalizedString localizedString;
1243 while (fontFamilyIterator->next(&localizedString) && !localizedString.fStrin g.size()) { }
1244 fontFamilyIterator->unref();
1245 return String(localizedString.fString.c_str());
1246 }
1247
1248 void InspectorDOMAgent::platformFontsForRenderer(RenderText* renderer, StringBui lder& fontChars, RefPtr<TypeBuilder::Array<String> >& fonts)
1249 {
1250 for (InlineTextBox* box = renderer->firstTextBox(); box; box = box->nextText Box()) {
1251 RenderStyle* style = renderer->style(box->isFirstLineStyle());
1252 const Font& font = style->font();
1253 TextRun run = box->constructTextRunForInspector(style, font);
1254 WidthIterator it(&font, run, 0, false);
1255 GlyphBuffer glyphBuffer;
1256 it.advance(run.length(), &glyphBuffer);
1257 for (int i = 0; i < glyphBuffer.size(); ++i) {
1258 fonts->addItem(familyNameFromSimpleFontData(glyphBuffer.fontDataAt(i )));
1259 fontChars.append(run[i]);
1260 }
1261 }
1262 }
1263
1264 void InspectorDOMAgent::getPlatformFontsForNode(WebCore::ErrorString* errorStrin g, int nodeId,
1265 WTF::RefPtr<WebCore::TypeBuilder::Array<WebCore::TypeBuilder::DOM::TextNodeP latformFonts> >& textNodeList)
1266 {
1267 Node* node = assertNode(errorString, nodeId);
1268 if (!node)
1269 return;
1270 Vector<Node*> textNodes;
1271 if (node->nodeType() == Node::TEXT_NODE) {
1272 if (node->renderer())
1273 textNodes.append(node);
1274 } else {
1275 for (Node* child = node->firstChild(); child; child = child->nextSibling ()) {
1276 if (child->nodeType() == Node::TEXT_NODE && child->renderer())
1277 textNodes.append(child);
1278 }
1279 }
1280
1281 textNodeList = TypeBuilder::Array<WebCore::TypeBuilder::DOM::TextNodePlatfor mFonts>::create();
1282 for (int i = 0; i < textNodes.size(); ++i) {
1283 StringBuilder fontChars;
1284 RefPtr<TypeBuilder::Array<String> > fonts = TypeBuilder::Array<String>:: create();
1285 RenderText* renderer = static_cast<RenderText*>(textNodes[i]->renderer() );
pfeldman 2013/08/16 08:16:48 toRenderText
1286 if (renderer->isTextFragment()) {
1287 RenderTextFragment* textFragment = static_cast<RenderTextFragment*>( renderer);
pfeldman 2013/08/16 08:16:48 ditto
1288 if (textFragment->firstLetter()) {
1289 RenderObject* firstLetter = textFragment->firstLetter();
1290 for (RenderObject* current = firstLetter->firstChild(); current; current = current->nextSibling()) {
1291 if (current->isText())
1292 platformFontsForRenderer(static_cast<RenderText*>(curren t), fontChars, fonts);
pfeldman 2013/08/16 08:16:48 collectFontsForRenderer
1293 }
1294 }
1295 }
1296 platformFontsForRenderer(renderer, fontChars, fonts);
pfeldman 2013/08/16 08:16:48 drop fontChars
1297 if (!fonts->length())
1298 continue;
1299 RefPtr<TypeBuilder::DOM::TextNodePlatformFonts> textNodePlatformFonts = TypeBuilder::DOM::TextNodePlatformFonts::create()
1300 .setText(fontChars.toString())
1301 .setFonts(fonts);
1302 textNodeList->addItem(textNodePlatformFonts);
1303 }
1304 }
1305
1228 void InspectorDOMAgent::hideHighlight(ErrorString*) 1306 void InspectorDOMAgent::hideHighlight(ErrorString*)
1229 { 1307 {
1230 m_overlay->hideHighlight(); 1308 m_overlay->hideHighlight();
1231 } 1309 }
1232 1310
1233 void InspectorDOMAgent::moveTo(ErrorString* errorString, int nodeId, int targetE lementId, const int* const anchorNodeId, int* newNodeId) 1311 void InspectorDOMAgent::moveTo(ErrorString* errorString, int nodeId, int targetE lementId, const int* const anchorNodeId, int* newNodeId)
1234 { 1312 {
1235 Node* node = assertEditableNode(errorString, nodeId); 1313 Node* node = assertEditableNode(errorString, nodeId);
1236 if (!node) 1314 if (!node)
1237 return; 1315 return;
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
1850 1928
1851 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(m ainWorldScriptState(frame)); 1929 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(m ainWorldScriptState(frame));
1852 if (injectedScript.hasNoValue()) 1930 if (injectedScript.hasNoValue())
1853 return 0; 1931 return 0;
1854 1932
1855 return injectedScript.wrapNode(node, objectGroup); 1933 return injectedScript.wrapNode(node, objectGroup);
1856 } 1934 }
1857 1935
1858 } // namespace WebCore 1936 } // namespace WebCore
1859 1937
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698