Changeset 113783 in webkit
- Timestamp:
- Apr 10, 2012 3:39:39 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r113781 r113783 1 2012-04-10 Peter Rybin <peter.rybin@gmail.com> 2 3 Web Inspector: CodeGeneratorInspector.py: do not expose raw methods from generated types 4 https://bugs.webkit.org/show_bug.cgi?id=83390 5 6 Reviewed by Yury Semikhatsky. 7 8 Intermediate classes InspectorObjectBase and InspectorArrayBase are created. They have all raw methos 9 protected. InspectorObject and InspectorArray now inherit the corresponding base classes with exposing 10 all their protected methods. 11 12 "Open types" are left inheriting from InspectorObject, plus field name constants are generated for 13 an easy random access to all properties. 14 15 All the client code is fixed to use type-safe API rather than raw access methods in function parameter 16 and return types and bodies. 17 18 * inspector/CodeGeneratorInspector.py: 19 (RawTypes.Object): 20 (RawTypes.Object.get_setter_name): 21 (RawTypes.Array): 22 (RawTypes.Array.get_setter_name): 23 (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator.CodeGenerator.generate_type_builder): 24 (Array): 25 (Generator): 26 (Generator.resolve_type_and_generate_ad_hoc.InterfaceGenerateContext): 27 (Generator.process_types.GenerateContext): 28 * inspector/InspectorDOMAgent.cpp: 29 (WebCore::InspectorDOMAgent::querySelectorAll): 30 (WebCore::InspectorDOMAgent::getEventListenersForNode): 31 (WebCore::InspectorDOMAgent::buildObjectForEventListener): 32 * inspector/InspectorDOMAgent.h: 33 (InspectorDOMAgent): 34 * inspector/InspectorDOMDebuggerAgent.cpp: 35 (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent): 36 * inspector/InspectorDebuggerAgent.cpp: 37 (WebCore::InspectorDebuggerAgent::setBreakpointByUrl): 38 (WebCore::InspectorDebuggerAgent::didPause): 39 * inspector/InspectorPageAgent.cpp: 40 (WebCore::buildObjectForSearchResult): 41 (WebCore::InspectorPageAgent::searchInResources): 42 (WebCore::InspectorPageAgent::buildObjectForFrameTree): 43 * inspector/InspectorResourceAgent.cpp: 44 (WebCore::InspectorResourceAgent::didReceiveResponse): 45 * inspector/InspectorStyleSheet.cpp: 46 (WebCore::fillMediaListChain): 47 (WebCore::InspectorStyle::styleWithProperties): 48 * inspector/InspectorValues.cpp: 49 (WebCore::InspectorObjectBase::~InspectorObjectBase): 50 (WebCore::InspectorObjectBase::asObject): 51 (WebCore::InspectorObjectBase::openAccessors): 52 (WebCore): 53 (WebCore::InspectorObjectBase::getBoolean): 54 (WebCore::InspectorObjectBase::getString): 55 (WebCore::InspectorObjectBase::getObject): 56 (WebCore::InspectorObjectBase::getArray): 57 (WebCore::InspectorObjectBase::get): 58 (WebCore::InspectorObjectBase::remove): 59 (WebCore::InspectorObjectBase::writeJSON): 60 (WebCore::InspectorObjectBase::InspectorObjectBase): 61 (WebCore::InspectorArrayBase::~InspectorArrayBase): 62 (WebCore::InspectorArrayBase::asArray): 63 (WebCore::InspectorArrayBase::writeJSON): 64 (WebCore::InspectorArrayBase::InspectorArrayBase): 65 (WebCore::InspectorArrayBase::get): 66 * inspector/InspectorValues.h: 67 (InspectorObjectBase): 68 (InspectorObject): 69 (WebCore::InspectorObject::create): 70 (WebCore): 71 (InspectorArrayBase): 72 (WebCore::InspectorArrayBase::length): 73 (InspectorArray): 74 (WebCore::InspectorArray::create): 75 (WebCore::InspectorObjectBase::find): 76 (WebCore::InspectorObjectBase::setBoolean): 77 (WebCore::InspectorObjectBase::setNumber): 78 (WebCore::InspectorObjectBase::setString): 79 (WebCore::InspectorObjectBase::setValue): 80 (WebCore::InspectorObjectBase::setObject): 81 (WebCore::InspectorObjectBase::setArray): 82 (WebCore::InspectorArrayBase::pushBoolean): 83 (WebCore::InspectorArrayBase::pushInt): 84 (WebCore::InspectorArrayBase::pushNumber): 85 (WebCore::InspectorArrayBase::pushString): 86 (WebCore::InspectorArrayBase::pushValue): 87 (WebCore::InspectorArrayBase::pushObject): 88 (WebCore::InspectorArrayBase::pushArray): 89 * inspector/TimelineRecordFactory.cpp: 90 (WebCore::TimelineRecordFactory::createGenericRecord): 91 1 92 2012-04-10 Philip Rogers <pdr@google.com> 2 93 -
trunk/Source/WebCore/inspector/CodeGeneratorInspector.py
r113440 r113783 62 62 "Timeline.TimelineEvent"]) 63 63 64 TYPES_WITH_OPEN_FIELD_LIST_SET = frozenset(["Timeline.TimelineEvent"]) 64 TYPES_WITH_OPEN_FIELD_LIST_SET = frozenset(["Timeline.TimelineEvent", 65 # InspectorStyleSheet not only creates this property but wants to read it and modify it. 66 "CSS.CSSProperty", 67 # InspectorResourceAgent needs to update mime-type. 68 "Network.Response"]) 65 69 66 70 cmdline_parser = optparse.OptionParser() … … 423 427 return "Object" 424 428 425 get_setter_name = get_getter_name 429 @staticmethod 430 def get_setter_name(): 431 return "Value" 426 432 427 433 @staticmethod … … 507 513 return "Array" 508 514 509 get_setter_name = get_getter_name 515 @staticmethod 516 def get_setter_name(): 517 return "Value" 510 518 511 519 @staticmethod … … 1142 1150 helper.write_doc(writer) 1143 1151 class_name = fixed_type_name.class_name 1152 1153 is_open_type = (context_domain_name + "." + class_name) in TYPES_WITH_OPEN_FIELD_LIST_SET 1154 1144 1155 fixed_type_name.output_comment(writer) 1145 1156 writer.newline("class ") 1146 1157 writer.append(class_name) 1147 writer.append(" : public InspectorObject {\n") 1158 writer.append(" : public ") 1159 if is_open_type: 1160 writer.append("InspectorObject") 1161 else: 1162 writer.append("InspectorObjectBase") 1163 writer.append(" {\n") 1148 1164 writer.newline("public:\n") 1149 1165 ad_hoc_type_writer = writer.insert_writer(" ") … … 1185 1201 } 1186 1202 1187 Builder(PassRefPtr< %s> ptr)1203 Builder(PassRefPtr</*%s*/InspectorObject> ptr) 1188 1204 { 1189 1205 COMPILE_ASSERT(STATE == NoFieldsSet, builder_created_in_non_init_state); … … 1223 1239 { 1224 1240 COMPILE_ASSERT(STATE == AllFieldsSet, result_is_not_ready); 1241 COMPILE_ASSERT(sizeof(%s) == sizeof(InspectorObject), cannot_cast); 1225 1242 return *reinterpret_cast<RefPtr<%s>*>(&m_result); 1226 1243 } … … 1233 1250 1234 1251 """ 1235 % (class_name, class_name, class_name, class_name ))1252 % (class_name, class_name, class_name, class_name, class_name)) 1236 1253 1237 1254 writer.newline(" /*\n") … … 1245 1262 """ static Builder<NoFieldsSet> create() 1246 1263 { 1247 return Builder<NoFieldsSet>( adoptRef(new %s()));1264 return Builder<NoFieldsSet>(InspectorObject::create()); 1248 1265 } 1249 """ % class_name)1266 """) 1250 1267 1251 1268 writer.newline(" typedef TypeBuilder::StructItemTraits ItemTraits;\n") … … 1266 1283 1267 1284 if setter_name in INSPECTOR_OBJECT_SETTER_NAMES: 1268 writer.newline(" using InspectorObject ::%s;\n\n" % setter_name)1285 writer.newline(" using InspectorObjectBase::%s;\n\n" % setter_name) 1269 1286 1270 1287 if class_binding_cls.need_user_runtime_cast_: … … 1277 1294 writer.newline(" assertCorrectValue(object.get());\n") 1278 1295 writer.append("#endif // %s\n" % VALIDATOR_IFDEF_NAME) 1279 writer.newline(" COMPILE_ASSERT(sizeof(%s) == sizeof(InspectorObject ), type_cast_problem);\n" % class_name)1280 writer.newline(" return static_cast<%s*>( object.get());\n" % class_name)1296 writer.newline(" COMPILE_ASSERT(sizeof(%s) == sizeof(InspectorObjectBase), type_cast_problem);\n" % class_name) 1297 writer.newline(" return static_cast<%s*>(static_cast<InspectorObjectBase*>(object.get()));\n" % class_name) 1281 1298 writer.newline(" }\n") 1282 1299 writer.append("\n") … … 1322 1339 validator_writer.newline(" ASSERT(foundPropertiesCount == object->size());\n") 1323 1340 validator_writer.newline("}\n\n\n") 1341 1342 if is_open_type: 1343 cpp_writer = generate_context.cpp_writer 1344 writer.append("\n") 1345 writer.newline(" // Property names for type generated as open.\n") 1346 for prop_data in resolve_data.main_properties + resolve_data.optional_properties: 1347 prop_name = prop_data.p["name"] 1348 prop_field_name = Capitalizer.lower_camel_case_to_upper(prop_name) 1349 writer.newline(" static const char* %s;\n" % (prop_field_name)) 1350 cpp_writer.newline("const char* %s%s::%s = \"%s\";\n" % (helper.full_name_prefix_for_impl, class_name, prop_field_name, prop_name)) 1351 1324 1352 1325 1353 writer.newline("};\n\n") … … 2205 2233 2206 2234 template<typename T> 2207 class Array : public InspectorArray {2235 class Array : public InspectorArrayBase { 2208 2236 private: 2209 2237 Array() { } 2238 2239 InspectorArray* openAccessors() { 2240 COMPILE_ASSERT(sizeof(InspectorArray) == sizeof(Array<T>), cannot_cast); 2241 return static_cast<InspectorArray*>(static_cast<InspectorArrayBase*>(this)); 2242 } 2210 2243 2211 2244 public: 2212 2245 void addItem(PassRefPtr<T> value) 2213 2246 { 2214 ArrayItemHelper<T>::Traits::pushRefPtr(this , value);2247 ArrayItemHelper<T>::Traits::pushRefPtr(this->openAccessors(), value); 2215 2248 } 2216 2249 2217 2250 void addItem(T value) 2218 2251 { 2219 ArrayItemHelper<T>::Traits::pushRaw(this , value);2252 ArrayItemHelper<T>::Traits::pushRaw(this->openAccessors(), value); 2220 2253 } 2221 2254 … … 2234 2267 #endif // !ASSERT_DISABLED 2235 2268 COMPILE_ASSERT(sizeof(Array<T>) == sizeof(InspectorArray), type_cast_problem); 2236 return static_cast<Array<T>*>( array.get());2269 return static_cast<Array<T>*>(static_cast<InspectorArrayBase*>(array.get())); 2237 2270 } 2238 2271 … … 2251 2284 2252 2285 struct StructItemTraits { 2253 static void pushRefPtr(InspectorArray* array, PassRefPtr<Inspector Object> value)2286 static void pushRefPtr(InspectorArray* array, PassRefPtr<InspectorValue> value) 2254 2287 { 2255 array->push Object(value);2288 array->pushValue(value); 2256 2289 } 2257 2290 … … 2295 2328 struct ArrayItemHelper<InspectorObject> { 2296 2329 struct Traits { 2297 static void pushRefPtr(InspectorArray* array, PassRefPtr<Inspector Object> value)2330 static void pushRefPtr(InspectorArray* array, PassRefPtr<InspectorValue> value) 2298 2331 { 2299 array->push Object(value);2332 array->pushValue(value); 2300 2333 } 2301 2334 }; … … 2307 2340 static void pushRefPtr(InspectorArray* array, PassRefPtr<TypeBuilder::Array<T> > value) 2308 2341 { 2309 array->push Array(value);2342 array->pushValue(value); 2310 2343 } 2311 2344 }; … … 2348 2381 2349 2382 } // namespace TypeBuilder 2383 2384 $implCode 2350 2385 2351 2386 #if """ + VALIDATOR_IFDEF_NAME + """ … … 2468 2503 validator_impl_list = [] 2469 2504 validator_impl_raw_types_list = [] 2505 type_builder_impl_list = [] 2470 2506 2471 2507 … … 2778 2814 class InterfaceGenerateContext: 2779 2815 validator_writer = "not supported in InterfaceGenerateContext" 2816 cpp_writer = validator_writer 2780 2817 2781 2818 for type in ad_hoc_type_list: … … 2792 2829 class GenerateContext: 2793 2830 validator_writer = Writer(Generator.validator_impl_list, "") 2831 cpp_writer = Writer(Generator.type_builder_impl_list, "") 2794 2832 2795 2833 def generate_all_domains_code(out, type_data_callback): … … 2906 2944 typebuilder_cpp_file.write(Templates.typebuilder_cpp.substitute(None, 2907 2945 enumConstantValues=EnumConstants.get_enum_constant_code(), 2946 implCode=join(flatten_list(Generator.type_builder_impl_list), ""), 2908 2947 validatorCode=join(flatten_list(Generator.validator_impl_list), ""))) 2909 2948 -
trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp
r113700 r113783 506 506 507 507 for (unsigned i = 0; i < nodes->length(); ++i) 508 result-> pushNumber(pushNodePathToFrontend(nodes->item(i)));508 result->addItem(pushNodePathToFrontend(nodes->item(i))); 509 509 } 510 510 … … 747 747 const RegisteredEventListener& listener = vector[j]; 748 748 if (listener.useCapture) 749 listenersArray-> pushObject(buildObjectForEventListener(listener, info.eventType, info.node));749 listenersArray->addItem(buildObjectForEventListener(listener, info.eventType, info.node)); 750 750 } 751 751 } … … 758 758 const RegisteredEventListener& listener = vector[j]; 759 759 if (!listener.useCapture) 760 listenersArray-> pushObject(buildObjectForEventListener(listener, info.eventType, info.node));760 listenersArray->addItem(buildObjectForEventListener(listener, info.eventType, info.node)); 761 761 } 762 762 } … … 1288 1288 } 1289 1289 1290 PassRefPtr< InspectorObject> InspectorDOMAgent::buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node)1290 PassRefPtr<TypeBuilder::DOM::EventListener> InspectorDOMAgent::buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node) 1291 1291 { 1292 1292 RefPtr<EventListener> eventListener = registeredEventListener.listener; -
trunk/Source/WebCore/inspector/InspectorDOMAgent.h
r112428 r113783 228 228 PassRefPtr<TypeBuilder::Array<String> > buildArrayForElementAttributes(Element*); 229 229 PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap); 230 PassRefPtr< InspectorObject> buildObjectForEventListener(const RegisteredEventListener&, const AtomicString& eventType, Node*);230 PassRefPtr<TypeBuilder::DOM::EventListener> buildObjectForEventListener(const RegisteredEventListener&, const AtomicString& eventType, Node*); 231 231 232 232 Node* nodeForPath(const String& path); -
trunk/Source/WebCore/inspector/InspectorDOMDebuggerAgent.cpp
r113230 r113783 308 308 // For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint. 309 309 // Target node may be unknown to frontend, so we need to push it first. 310 RefPtr< InspectorObject> targetNodeObject = m_domAgent->resolveNode(target, InspectorDebuggerAgent::backtraceObjectGroup);311 description->set Object("targetNode", targetNodeObject);310 RefPtr<TypeBuilder::Runtime::RemoteObject> targetNodeObject = m_domAgent->resolveNode(target, InspectorDebuggerAgent::backtraceObjectGroup); 311 description->setValue("targetNode", targetNodeObject); 312 312 313 313 // Find breakpoint owner node. -
trunk/Source/WebCore/inspector/InspectorDebuggerAgent.cpp
r112555 r113783 243 243 if (!matches(it->second.url, url, isRegex)) 244 244 continue; 245 RefPtr< InspectorObject> location = resolveBreakpoint(breakpointId, it->first, breakpoint);245 RefPtr<TypeBuilder::Debugger::Location> location = resolveBreakpoint(breakpointId, it->first, breakpoint); 246 246 if (location) 247 locations-> pushObject(location);247 locations->addItem(location); 248 248 } 249 249 *outBreakpointId = breakpointId; … … 569 569 if (!injectedScript.hasNoValue()) { 570 570 m_breakReason = InspectorFrontend::Debugger::Reason::Exception; 571 m_breakAuxData = injectedScript.wrapObject(exception, "backtrace") ;571 m_breakAuxData = injectedScript.wrapObject(exception, "backtrace")->openAccessors(); 572 572 // m_breakAuxData might be null after this. 573 573 } -
trunk/Source/WebCore/inspector/InspectorPageAgent.cpp
r113709 r113783 590 590 } 591 591 592 static PassRefPtr<InspectorObject> buildObjectForSearchResult(const String& frameId, const String& url, int matchesCount) 593 { 594 RefPtr<InspectorObject> result = InspectorObject::create(); 595 result->setString("frameId", frameId); 596 result->setString("url", url); 597 result->setNumber("matchesCount", matchesCount); 598 599 return result; 592 static PassRefPtr<TypeBuilder::Page::SearchResult> buildObjectForSearchResult(const String& frameId, const String& url, int matchesCount) 593 { 594 return TypeBuilder::Page::SearchResult::create() 595 .setUrl(url) 596 .setFrameId(frameId) 597 .setMatchesCount(matchesCount); 600 598 } 601 599 … … 616 614 int matchesCount = ContentSearchUtils::countRegularExpressionMatches(regex, content); 617 615 if (matchesCount) 618 searchResults-> pushValue(buildObjectForSearchResult(frameId(frame), cachedResource->url(), matchesCount));616 searchResults->addItem(buildObjectForSearchResult(frameId(frame), cachedResource->url(), matchesCount)); 619 617 } 620 618 } … … 622 620 int matchesCount = ContentSearchUtils::countRegularExpressionMatches(regex, content); 623 621 if (matchesCount) 624 searchResults-> pushValue(buildObjectForSearchResult(frameId(frame), frame->document()->url(), matchesCount));622 searchResults->addItem(buildObjectForSearchResult(frameId(frame), frame->document()->url(), matchesCount)); 625 623 } 626 624 } … … 904 902 } 905 903 906 RefPtr< InspectorArray> childrenArray;904 RefPtr<TypeBuilder::Array<TypeBuilder::Page::FrameResourceTree> > childrenArray; 907 905 for (Frame* child = frame->tree()->firstChild(); child; child = child->tree()->nextSibling()) { 908 906 if (!childrenArray) { 909 childrenArray = InspectorArray::create();910 result->set Array("childFrames",childrenArray);907 childrenArray = TypeBuilder::Array<TypeBuilder::Page::FrameResourceTree>::create(); 908 result->setChildFrames(childrenArray); 911 909 } 912 childrenArray-> pushObject(buildObjectForFrameTree(child));910 childrenArray->addItem(buildObjectForFrameTree(child)); 913 911 } 914 912 return result; -
trunk/Source/WebCore/inspector/InspectorResourceAgent.cpp
r113438 r113783 254 254 // Use mime type from cached resource in case the one in response is empty. 255 255 if (resourceResponse && response.mimeType().isEmpty()) 256 resourceResponse->setString( "mimeType", cachedResource->response().mimeType());256 resourceResponse->setString(TypeBuilder::Network::Response::MimeType, cachedResource->response().mimeType()); 257 257 258 258 m_resourcesData->addCachedResource(requestId, cachedResource); -
trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp
r113438 r113783 230 230 else 231 231 sourceURL = ""; 232 mediaArray-> pushObject(buildMediaObject(mediaList, styleSheet->ownerNode() ? MediaListSourceLinkedSheet : MediaListSourceInlineSheet, sourceURL));232 mediaArray->addItem(buildMediaObject(mediaList, styleSheet->ownerNode() ? MediaListSourceLinkedSheet : MediaListSourceInlineSheet, sourceURL)); 233 233 } 234 234 parentRule = styleSheet->ownerRule(); … … 511 511 else { 512 512 bool previousParsedOk; 513 bool success = activeIt->second->getBoolean( "parsedOk", &previousParsedOk);513 bool success = activeIt->second->getBoolean(TypeBuilder::CSS::CSSProperty::ParsedOk, &previousParsedOk); 514 514 if (success && !previousParsedOk) 515 515 shouldInactivate = true; … … 520 520 if (shouldInactivate) { 521 521 activeIt->second->setStatus(TypeBuilder::CSS::CSSProperty::Status::Inactive); 522 activeIt->second->remove( "shorthandName");522 activeIt->second->remove(TypeBuilder::CSS::CSSProperty::ShorthandName); 523 523 propertyNameToPreviousActiveProperty.set(canonicalPropertyName, property); 524 524 } … … 547 547 shorthandEntry->setString("name", shorthand); 548 548 shorthandEntry->setString("value", shorthandValue(shorthand)); 549 shorthandEntries-> pushObject(shorthandEntry.release());549 shorthandEntries->addItem(shorthandEntry.release()); 550 550 } 551 551 } -
trunk/Source/WebCore/inspector/InspectorValues.cpp
r110854 r113783 59 59 INVALID_TOKEN, 60 60 }; 61 61 62 62 const char* const nullString = "null"; 63 63 const char* const trueString = "true"; … … 242 242 case '9': 243 243 case '-': 244 if (parseNumberToken(start, end, tokenEnd)) 244 if (parseNumberToken(start, end, tokenEnd)) 245 245 return NUMBER; 246 break; 246 break; 247 247 case '"': 248 if (parseStringToken(start + 1, end, tokenEnd)) 248 if (parseStringToken(start + 1, end, tokenEnd)) 249 249 return STRING; 250 250 break; … … 662 662 } 663 663 664 InspectorObject::~InspectorObject() 665 { 666 } 667 668 bool InspectorObject::asObject(RefPtr<InspectorObject>* output) 669 { 670 *output = this; 671 return true; 672 } 673 674 PassRefPtr<InspectorObject> InspectorObject::asObject() 675 { 676 return this; 677 } 678 679 bool InspectorObject::getBoolean(const String& name, bool* output) const 664 InspectorObjectBase::~InspectorObjectBase() 665 { 666 } 667 668 bool InspectorObjectBase::asObject(RefPtr<InspectorObject>* output) 669 { 670 COMPILE_ASSERT(sizeof(InspectorObject) == sizeof(InspectorObjectBase), cannot_cast); 671 *output = static_cast<InspectorObject*>(this); 672 return true; 673 } 674 675 PassRefPtr<InspectorObject> InspectorObjectBase::asObject() 676 { 677 return openAccessors(); 678 } 679 680 InspectorObject* InspectorObjectBase::openAccessors() 681 { 682 COMPILE_ASSERT(sizeof(InspectorObject) == sizeof(InspectorObjectBase), cannot_cast); 683 return static_cast<InspectorObject*>(this); 684 } 685 686 bool InspectorObjectBase::getBoolean(const String& name, bool* output) const 680 687 { 681 688 RefPtr<InspectorValue> value = get(name); … … 685 692 } 686 693 687 bool InspectorObject ::getString(const String& name, String* output) const694 bool InspectorObjectBase::getString(const String& name, String* output) const 688 695 { 689 696 RefPtr<InspectorValue> value = get(name); … … 693 700 } 694 701 695 PassRefPtr<InspectorObject> InspectorObject ::getObject(const String& name) const702 PassRefPtr<InspectorObject> InspectorObjectBase::getObject(const String& name) const 696 703 { 697 704 PassRefPtr<InspectorValue> value = get(name); … … 701 708 } 702 709 703 PassRefPtr<InspectorArray> InspectorObject ::getArray(const String& name) const710 PassRefPtr<InspectorArray> InspectorObjectBase::getArray(const String& name) const 704 711 { 705 712 PassRefPtr<InspectorValue> value = get(name); … … 709 716 } 710 717 711 PassRefPtr<InspectorValue> InspectorObject ::get(const String& name) const718 PassRefPtr<InspectorValue> InspectorObjectBase::get(const String& name) const 712 719 { 713 720 Dictionary::const_iterator it = m_data.find(name); … … 717 724 } 718 725 719 void InspectorObject ::remove(const String& name)726 void InspectorObjectBase::remove(const String& name) 720 727 { 721 728 m_data.remove(name); … … 728 735 } 729 736 730 void InspectorObject ::writeJSON(StringBuilder* output) const737 void InspectorObjectBase::writeJSON(StringBuilder* output) const 731 738 { 732 739 output->append('{'); … … 743 750 } 744 751 745 InspectorObject ::InspectorObject()752 InspectorObjectBase::InspectorObjectBase() 746 753 : InspectorValue(TypeObject) 747 754 , m_data() … … 750 757 } 751 758 752 InspectorArray::~InspectorArray() 753 { 754 } 755 756 bool InspectorArray::asArray(RefPtr<InspectorArray>* output) 757 { 758 *output = this; 759 return true; 760 } 761 762 PassRefPtr<InspectorArray> InspectorArray::asArray() 763 { 764 return this; 765 } 766 767 void InspectorArray::writeJSON(StringBuilder* output) const 759 InspectorArrayBase::~InspectorArrayBase() 760 { 761 } 762 763 bool InspectorArrayBase::asArray(RefPtr<InspectorArray>* output) 764 { 765 COMPILE_ASSERT(sizeof(InspectorArrayBase) == sizeof(InspectorArray), cannot_cast); 766 *output = static_cast<InspectorArray*>(this); 767 return true; 768 } 769 770 PassRefPtr<InspectorArray> InspectorArrayBase::asArray() 771 { 772 COMPILE_ASSERT(sizeof(InspectorArrayBase) == sizeof(InspectorArray), cannot_cast); 773 return static_cast<InspectorArray*>(this); 774 } 775 776 void InspectorArrayBase::writeJSON(StringBuilder* output) const 768 777 { 769 778 output->append('['); … … 776 785 } 777 786 778 InspectorArray ::InspectorArray()787 InspectorArrayBase::InspectorArrayBase() 779 788 : InspectorValue(TypeArray) 780 789 , m_data() … … 782 791 } 783 792 784 PassRefPtr<InspectorValue> InspectorArray ::get(size_t index)793 PassRefPtr<InspectorValue> InspectorArrayBase::get(size_t index) 785 794 { 786 795 ASSERT(index < m_data.size()); -
trunk/Source/WebCore/inspector/InspectorValues.h
r112555 r113783 158 158 }; 159 159 160 class InspectorObject : public InspectorValue {160 class InspectorObjectBase : public InspectorValue { 161 161 private: 162 162 typedef HashMap<String, RefPtr<InspectorValue> > Dictionary; … … 166 166 typedef Dictionary::const_iterator const_iterator; 167 167 168 static PassRefPtr<InspectorObject> create()169 {170 return adoptRef(new InspectorObject()); 171 } 172 ~InspectorObject ();168 virtual PassRefPtr<InspectorObject> asObject(); 169 InspectorObject* openAccessors(); 170 171 protected: 172 ~InspectorObjectBase(); 173 173 174 174 virtual bool asObject(RefPtr<InspectorObject>* output); 175 virtual PassRefPtr<InspectorObject> asObject();176 175 177 176 void setBoolean(const String& name, bool); … … 209 208 210 209 protected: 211 InspectorObject ();210 InspectorObjectBase(); 212 211 213 212 private: … … 216 215 }; 217 216 218 class InspectorArray : public InspectorValue { 217 class InspectorObject : public InspectorObjectBase { 218 public: 219 static PassRefPtr<InspectorObject> create() 220 { 221 return adoptRef(new InspectorObject()); 222 } 223 224 using InspectorObjectBase::asObject; 225 226 using InspectorObjectBase::setBoolean; 227 using InspectorObjectBase::setNumber; 228 using InspectorObjectBase::setString; 229 using InspectorObjectBase::setValue; 230 using InspectorObjectBase::setObject; 231 using InspectorObjectBase::setArray; 232 233 using InspectorObjectBase::find; 234 using InspectorObjectBase::getBoolean; 235 using InspectorObjectBase::getNumber; 236 using InspectorObjectBase::getString; 237 using InspectorObjectBase::getObject; 238 using InspectorObjectBase::getArray; 239 using InspectorObjectBase::get; 240 241 using InspectorObjectBase::remove; 242 243 using InspectorObjectBase::begin; 244 using InspectorObjectBase::end; 245 246 using InspectorObjectBase::size; 247 }; 248 249 250 class InspectorArrayBase : public InspectorValue { 219 251 public: 220 252 typedef Vector<RefPtr<InspectorValue> >::iterator iterator; 221 253 typedef Vector<RefPtr<InspectorValue> >::const_iterator const_iterator; 222 254 223 static PassRefPtr<InspectorArray> create() 224 { 225 return adoptRef(new InspectorArray()); 226 } 227 ~InspectorArray(); 255 virtual PassRefPtr<InspectorArray> asArray(); 256 257 unsigned length() const { return m_data.size(); } 258 259 protected: 260 ~InspectorArrayBase(); 228 261 229 262 virtual bool asArray(RefPtr<InspectorArray>* output); 230 virtual PassRefPtr<InspectorArray> asArray();231 263 232 264 void pushBoolean(bool); … … 237 269 void pushObject(PassRefPtr<InspectorObject>); 238 270 void pushArray(PassRefPtr<InspectorArray>); 239 unsigned length() const { return m_data.size(); }240 271 241 272 PassRefPtr<InspectorValue> get(size_t index); … … 249 280 250 281 protected: 251 InspectorArray ();282 InspectorArrayBase(); 252 283 253 284 private: … … 255 286 }; 256 287 257 inline InspectorObject::iterator InspectorObject::find(const String& name) 288 class InspectorArray : public InspectorArrayBase { 289 public: 290 static PassRefPtr<InspectorArray> create() 291 { 292 return adoptRef(new InspectorArray()); 293 } 294 295 using InspectorArrayBase::asArray; 296 297 using InspectorArrayBase::pushBoolean; 298 using InspectorArrayBase::pushInt; 299 using InspectorArrayBase::pushNumber; 300 using InspectorArrayBase::pushString; 301 using InspectorArrayBase::pushValue; 302 using InspectorArrayBase::pushObject; 303 using InspectorArrayBase::pushArray; 304 305 using InspectorArrayBase::get; 306 307 using InspectorArrayBase::begin; 308 using InspectorArrayBase::end; 309 }; 310 311 312 inline InspectorObjectBase::iterator InspectorObjectBase::find(const String& name) 258 313 { 259 314 return m_data.find(name); 260 315 } 261 316 262 inline InspectorObject ::const_iterator InspectorObject::find(const String& name) const317 inline InspectorObjectBase::const_iterator InspectorObjectBase::find(const String& name) const 263 318 { 264 319 return m_data.find(name); 265 320 } 266 321 267 inline void InspectorObject ::setBoolean(const String& name, bool value)322 inline void InspectorObjectBase::setBoolean(const String& name, bool value) 268 323 { 269 324 setValue(name, InspectorBasicValue::create(value)); 270 325 } 271 326 272 inline void InspectorObject ::setNumber(const String& name, double value)327 inline void InspectorObjectBase::setNumber(const String& name, double value) 273 328 { 274 329 setValue(name, InspectorBasicValue::create(value)); 275 330 } 276 331 277 inline void InspectorObject ::setString(const String& name, const String& value)332 inline void InspectorObjectBase::setString(const String& name, const String& value) 278 333 { 279 334 setValue(name, InspectorString::create(value)); 280 335 } 281 336 282 inline void InspectorObject ::setValue(const String& name, PassRefPtr<InspectorValue> value)337 inline void InspectorObjectBase::setValue(const String& name, PassRefPtr<InspectorValue> value) 283 338 { 284 339 ASSERT(value); … … 287 342 } 288 343 289 inline void InspectorObject ::setObject(const String& name, PassRefPtr<InspectorObject> value)344 inline void InspectorObjectBase::setObject(const String& name, PassRefPtr<InspectorObject> value) 290 345 { 291 346 ASSERT(value); … … 294 349 } 295 350 296 inline void InspectorObject ::setArray(const String& name, PassRefPtr<InspectorArray> value)351 inline void InspectorObjectBase::setArray(const String& name, PassRefPtr<InspectorArray> value) 297 352 { 298 353 ASSERT(value); … … 301 356 } 302 357 303 inline void InspectorArray ::pushBoolean(bool value)358 inline void InspectorArrayBase::pushBoolean(bool value) 304 359 { 305 360 m_data.append(InspectorBasicValue::create(value)); 306 361 } 307 362 308 inline void InspectorArray ::pushInt(int value)363 inline void InspectorArrayBase::pushInt(int value) 309 364 { 310 365 m_data.append(InspectorBasicValue::create(value)); 311 366 } 312 367 313 inline void InspectorArray ::pushNumber(double value)368 inline void InspectorArrayBase::pushNumber(double value) 314 369 { 315 370 m_data.append(InspectorBasicValue::create(value)); 316 371 } 317 372 318 inline void InspectorArray ::pushString(const String& value)373 inline void InspectorArrayBase::pushString(const String& value) 319 374 { 320 375 m_data.append(InspectorString::create(value)); 321 376 } 322 377 323 inline void InspectorArray ::pushValue(PassRefPtr<InspectorValue> value)378 inline void InspectorArrayBase::pushValue(PassRefPtr<InspectorValue> value) 324 379 { 325 380 ASSERT(value); … … 327 382 } 328 383 329 inline void InspectorArray ::pushObject(PassRefPtr<InspectorObject> value)384 inline void InspectorArrayBase::pushObject(PassRefPtr<InspectorObject> value) 330 385 { 331 386 ASSERT(value); … … 333 388 } 334 389 335 inline void InspectorArray ::pushArray(PassRefPtr<InspectorArray> value)390 inline void InspectorArrayBase::pushArray(PassRefPtr<InspectorArray> value) 336 391 { 337 392 ASSERT(value); -
trunk/Source/WebCore/inspector/TimelineRecordFactory.cpp
r110854 r113783 54 54 RefPtr<ScriptCallStack> stackTrace = createScriptCallStack(maxCallStackDepth, true); 55 55 if (stackTrace && stackTrace->size()) 56 record->set Array("stackTrace", stackTrace->buildInspectorArray());56 record->setValue("stackTrace", stackTrace->buildInspectorArray()); 57 57 } 58 58 return record.release();
Note: See TracChangeset
for help on using the changeset viewer.