From 8a53ee044de003495430e48203c8606dbf9aa261 Mon Sep 17 00:00:00 2001 From: "pinkerton@google.com" Date: Wed, 21 Jan 2009 16:41:33 +0000 Subject: Get browser window showing using a Browser object and accompanying scaffolding. Adds browser window controller and shim from NSWindow to BrowserWindow. Review URL: http://codereview.chromium.org/18368 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8364 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/app/nibs/English.lproj/BrowserWindow.xib | 1200 ++++++++++++++++++++ chrome/browser/app_controller_mac.mm | 11 +- chrome/browser/browser.cc | 42 +- chrome/browser/browser.h | 40 +- chrome/browser/browser_list.cc | 10 + chrome/browser/browser_window_cocoa.h | 64 ++ chrome/browser/browser_window_cocoa.mm | 141 +++ chrome/browser/browser_window_controller.h | 44 + chrome/browser/browser_window_controller.mm | 75 ++ chrome/browser/browser_window_factory.mm | 20 + .../browser/tab_contents/tab_contents_delegate.h | 6 +- chrome/chrome.xcodeproj/project.pbxproj | 63 +- chrome/common/temp_scaffolding_stubs.cpp | 25 +- chrome/common/temp_scaffolding_stubs.h | 127 ++- 14 files changed, 1833 insertions(+), 35 deletions(-) create mode 100644 chrome/app/nibs/English.lproj/BrowserWindow.xib create mode 100644 chrome/browser/browser_window_cocoa.h create mode 100644 chrome/browser/browser_window_cocoa.mm create mode 100644 chrome/browser/browser_window_controller.h create mode 100644 chrome/browser/browser_window_controller.mm create mode 100644 chrome/browser/browser_window_factory.mm (limited to 'chrome') diff --git a/chrome/app/nibs/English.lproj/BrowserWindow.xib b/chrome/app/nibs/English.lproj/BrowserWindow.xib new file mode 100644 index 0000000..31a244a --- /dev/null +++ b/chrome/app/nibs/English.lproj/BrowserWindow.xib @@ -0,0 +1,1200 @@ + + + + 1050 + 9G55 + 677 + 949.43 + 353.00 + + YES + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + BrowserWindowController + + + FirstResponder + + + NSApplication + + + 15 + 2 + {{60, 229}, {706, 587}} + 536870912 + Chromium + NSWindow + + + B145A277-7C29-43C9-B6A4-63E114ED1127 + + + YES + YES + YES + YES + 2 + 1 + + YES + + YES + 59ABC3D2-2AD8-4C2F-AE10-23237BFA8DB1 + 5BBB2826-942F-4018-A8DD-2AF46F021ED8 + 7B1969A0-D9D8-4542-B95B-0AF4F2131E63 + NSToolbarCustomizeToolbarItem + NSToolbarFlexibleSpaceItem + NSToolbarPrintItem + NSToolbarSeparatorItem + NSToolbarShowColorsItem + NSToolbarShowFontsItem + NSToolbarSpaceItem + + + YES + + + 59ABC3D2-2AD8-4C2F-AE10-23237BFA8DB1 + + Custom View + Back + + + + 268 + {{0, 14}, {44, 19}} + YES + + 67239424 + 134217728 + PDw + + LucidaGrande + 1.200000e+01 + 16 + + + -2038152961 + 164 + + + 400 + 75 + + + + + + {44, 19} + {44, 19} + YES + YES + 0 + YES + 0 + + + + 5BBB2826-942F-4018-A8DD-2AF46F021ED8 + + Custom View + OmniBar + + + + 303 + {{0, 14}, {345, 22}} + YES + + -1804468671 + 272630784 + + + LucidaGrande + 1.300000e+01 + 1044 + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + + + + + {345, 22} + {345, 22} + YES + YES + 0 + YES + 0 + + + + 7B1969A0-D9D8-4542-B95B-0AF4F2131E63 + + Custom View + Forward + + + + 268 + {{0, 14}, {52, 19}} + YES + + 67239424 + 134217728 + Pj4 + + + -2038152961 + 164 + + + 400 + 75 + + + + + + {52, 19} + {52, 19} + YES + YES + 0 + YES + 0 + + + NSToolbarCustomizeToolbarItem + Customize + Customize + Customize Toolbar + + + 683671552 + {32, 32} + + YES + + YES + + + + TU0AKgAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAICAgbAAAABAAAAAAEBAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAQEBAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAENDQ0dJSUlW11dXbBpaWnDb29vzyAgIGUPDw8xAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAABsbGyUoKChIHh4ePSkpKUonJycsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDCEJCQoWvr6/i9fX1/fX19f7h4eH82dnZ+YODg9sYGBg8 +AAAAAAAAAAAAAAAAAAAAAAAAAAJFRUV6ZGRkvf39/f/+/v7//////0NDQ7QAAAAEAAAAAAAAAAAAAAAA +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 +AAAACQAAABAAAAAYAAAAIAAAACoAAAAxAAAANgAAADkAAAA4AQEBOQAAAC8AAAAnAAAAHQAAABUAAAAO +AAAACgAAAAsAAAAPAAAAFwAAACAAAAAqAAAAMQAAADQAAAAzAAAALQAAACQAAAAbAAAAEgAAAAsAAAAA +AAAAAAAAAAQAAAAJAAAAEAAAABgAAAAgAAAAKgAAADEAAAA2AAAAOQAAADgAAAA1AAAALwAAACcAAAAd +AAAAFQAAAA4AAAAKAAAACwAAAA8AAAAXAAAAIAAAACoAAAAxAAAANAAAADMAAAAtAAAAJAAAABsAAAAS +AAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EKoBAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQD8AAABFwAEAAAAAQAAEAABHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAA +ELIAAAAAAAgACAAIAAgAAQABAAEAAQ + + + + + + 3 + MCAwAA + + + + runToolbarCustomizationPalette: + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarFlexibleSpaceItem + + Flexible Space + + + + + + {1, 5} + {20000, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + + + + NSToolbarPrintItem + Print + Print + Print + + + 750780416 + {32, 32} + + YES + + YES + + + + YES + + YES + imageNameKey + widget + + + YES + + image.ToolbarPrint + + image + + + {32, 32} + 0 + YES + + + + + + + printDocument: + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarSeparatorItem + + Separator + + + + + + {12, 5} + {12, 1000} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + + + + + NSToolbarShowColorsItem + Colors + Colors + Show Color Panel + + + 683671552 + {32, 32} + + YES + + YES + + + + TU0AKgAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCQEOEzkMUylkF5BChyLCWqEq6G+wL/1voSro +ZYciwlFkGJAyOQxTCAkBDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkEPXiWEIbtJyTf/Yt9C/370Tf+d/lf/ +tv9c/77+V/+/9E7/u99C/7XJOf9+hCK7QUAOXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxQHHRZjIY42zEH+RvBI/2r/W/9//2D/ +kf9k/6L/Zv+w/mf/wf9m/9T/Zv/l/2H//v9e/+/ySv/Mwzj+Y1kXjhQRAx0AAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMUCR0adDOgP91f/1n/c/9c/2P/ +aP5i/4P+bv+Y/nL/qP53/7r+d//K/nb/2P5z/+f+bv/5/2f///9i///8W//dwD//dF4coBQPAx0AAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFmM0jj7dc/9Z/4r/ +Yf5//2z+ff9y/nX/iP59/6H+hf+w/on/wf6K/9H+if/g/ob/7/6A////eP//823//uNk///kXf/drT// +Y0cXjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1BKF41zHv+ +WP+m/2H+mP9s/pb/eP6T/4L+jf+P/or/p/6V/7j+mv/L/p3/2/6a/+f+lv/8/5D///uH//7pe//+3G// +/sxk///MXf/Mizj+QSkOXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCQYO +IIRau0fwov9d/6//a/6q/3j+qv+H/qj/k/6l/5r+nv+s/qL/wv6q/9T+rP/i/qv/8v+m////n//+8ZX/ +/uGK//7Se//+w23//7hh//CdSv+ETiK7CQUBDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAw5K1M2yZX/Wv/K/2P+vv90/rz/hP67/5L+uv+f/rr/qf60/7L+sP/K/rr/2/69/+z+u//8/7X/ +//mt//7nov/+2Jb//sqJ//65eP/+q2f//6Re/8htOf85GwxSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAFmRRkD7ftv9d/9f/a/7O/3r+zv+M/s//mv7N/6r+zP+3/s3/wP7F/87+yP/l/s// +9v/N////xP/+7bv//t6t//7Qn//+v5D//q+A//6fbv//lGH/321C/2MrGI8AAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAfh3fCSfTW/2D/4/9v/t//g/7f/5H+3/+k/t//sv7g/8H+3v/Q/t7/ +2P7Z/+3+4P///93///fT//7kxP/+17T//sSo//61l//+pYb//pRz//+FZv/0bU7/hzIiwgAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACihmehT/vn/Yv/z/3L/8f+F//H/lv/z/6f/8/+3//H/ +yf/x/9n/8v/o//D/+P/x///97f/+6dv//tnK//7Iuv/+tqr//qeZ//6WiP/+hXb//3Nl//5jVv+hMyno +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK62w/Vb///9j/v//dP7//4b+//+X/v// +qP7//7f+///L/v//3P7//+////////////L0//7e4P/+zc///ru9//6qrP/+mZv//oiK//51d//+ZWf/ +/1pc/7AvMf0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAolqHoUfX+/2Hu//9x7f7/ +hO3+/5ft/v+m7f7/tu3+/8jt/v/X7P7/5Or+//Xt////6f///tvt//7K3f/+usv//qq7//6YrP/+h5r/ +/neK//9md//+VWj/oSk26AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB91h8JJ0fT/ +Yd///27b/v+A2/7/kdv+/6Hc/v+w2v7/wNv+/8rX/v/V1P7/69z+//7Z////0Pn//sLm//602P/+pcj/ +/pW3//6EqP/+cpb//2WJ//RNcP+HIjTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +FlBkkD+x3/9a0f//asr+/3rL/v+Kyf7/mcr+/6fH/v+0x/7/u8D+/83F/v/ky/7/8sn///+////+uPD/ +/qng//6d0f/+jsP//n6y//5uov//Xpf/30Jx/2MXLI8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAALKjlTNJLJ/1jG//9huP7/crf+/4G2/v+Ptf7/nLP+/6av/v+xrP7/yLb+/9q3/v/qt/7/ ++7L///+q+//+n+n//pPa//6Fy//+dLz//mWu//9cqP/IN3D/OAwbUgAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAEGCQ4eWIS7RZ3w/1us//9npf7/daX+/4Wj/v+OoP7/l5j+/6qg/v/Apv7/ +0Kj+/+Cn/v/wpP7//5r///+S8//+h+P//njU//5sxf//X7r/8Emd/4QhT7sJAQUOAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0mQV4zd8z+V6D//16T/v9pkf7/dY7+/3+G/v+Nh/7/ +pZH+/7aX/v/Jl/7/2Zb+/+aR/v/3jP///4L+//556//+bN7//mHO//9Zzv/MNo3+QA0pXQAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUyY446bt3/VoX//156/v9ndv7/ +bm7+/4d3/v+fgv7/roP+/7+G/v/Phf7/3oL+/+18/v//dP///2v2//5h5f//Web/3T2u/2MWSI4AAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwgUHRkwdKA6WN3/ +VWz//1le//9nX/7/gWr+/5Ru/v+ncf7/tnT+/8hy/v/Wb/7/5mr+//Rj////Xf///1j+/90+wv90Gl+g +EwMOHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +BAcWHxciaJMzPMz+RkTw/2hY//98Wv//j2H//6Bh//+uY/7/v2L//9Jg///jXf///Fr//+5H8v/MNcX+ +aBhdkxUEEh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAACAAAABRMTU3QoI5TMSDPI/2FA3/9+SfT/mVH+/7RW//+8U/7/vUn0/7o+3/+zNcj/ +jSSUzFMSUnMAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAQIAAAkFAAAVCAAAIg8EEkEmFl+UPCGOyE8op+dgK7D3biux/ncrsPd9KKfn +dSGOyFkWX5QbBBJBCAAAIgUAABUCAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgIAABAFAAAcCAAAKQwAADkRAABIFQAAVRgAAF0YAABf +GAAAXRUAAFURAABIDAAAOQgAACkFAAAcAgAAEAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAUAAAAIAAAACwAAAA4AAAAS +AAAAFAAAABUAAAAUAAAAEgAAAA4AAAALAAAACAAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EKoBAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQD8AAABFwAEAAAAAQAAEAABHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAA +ELIAAAAAAAgACAAIAAgAAQABAAEAAQ + + + + + + + + orderFrontColorPanel: + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarShowFontsItem + Fonts + Fonts + Show Font Panel + + + 683671552 + {32, 32} + + YES + + YES + + + + TU0AKgAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +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 +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EKoBAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQD8AAABFwAEAAAAAQAAEAABHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAA +ELIAAAAAAAgACAAIAAgAAQABAAEAAQ + + + + + + + + orderFrontFontPanel: + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarSpaceItem + + Space + + + + + + {32, 5} + {32, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + + + + + + + YES + + + + + + + + + + + + + YES + + + + + + + + + + + + + YES + + + {3.40282e+38, 3.40282e+38} + + + 256 + + YES + + + 303 + {{273, 304}, {164, 17}} + + YES + + 68288064 + 272630784 + The Interwebs goes here. + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2OQA + + + + 6 + System + controlTextColor + + + + + + + 266 + + YES + + + 268 + {{0, -1}, {106, 23}} + + YES + + -2080244224 + 134217728 + Tab 1 + + + -2033434369 + 162 + + + 400 + 75 + + + + + 268 + {{105, -1}, {106, 23}} + + YES + + -2080244224 + 134217728 + Tab 2 + + + -2033434369 + 162 + + + 400 + 75 + + + + {{0, 566}, {706, 21}} + + NSView + + + {706, 587} + + {{0, 0}, {1440, 878}} + {3.40282e+38, 3.40282e+38} + + + + + YES + + + window + + + + 13 + + + + back_button_ + + + + 20 + + + + forward_button_ + + + + 24 + + + + url_bar_ + + + + 28 + + + + delegate + + + + 29 + + + + delegate + + + + 35 + + + + + YES + + 0 + + YES + + + + + + -2 + + + RmlsZSdzIE93bmVyA + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + YES + + + + + Browser + + + 2 + + + YES + + + + + + + 11 + + + YES + + + + + + 12 + + + + + 3 + + + YES + + + + + + + + + + + + + + + 27 + + + YES + + + + + + 25 + + + YES + + + + + + 26 + + + + + 23 + + + YES + + + + + + 21 + + + YES + + + + + + 22 + + + + + 19 + + + YES + + + + + + 17 + + + YES + + + + + + 18 + + + + + 10 + + + + + 9 + + + + + 8 + + + + + 7 + + + + + 6 + + + + + 5 + + + + + 4 + + + + + 30 + + + YES + + + + + + + 31 + + + YES + + + + + + 32 + + + + + 33 + + + YES + + + + + + 34 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.IBWindowTemplateEditedContentRect + 1.NSWindowTemplate.visibleAtLaunch + 1.WindowOrigin + 1.editorWindowContentRectSynchronizationRect + 10.IBPluginDependency + 11.IBPluginDependency + 12.IBPluginDependency + 17.IBPluginDependency + 18.IBPluginDependency + 2.IBPluginDependency + 2.IBViewIntegration.shadowBlurRadius + 2.IBViewIntegration.shadowColor + 2.IBViewIntegration.shadowOffsetHeight + 2.IBViewIntegration.shadowOffsetWidth + 21.IBPluginDependency + 22.IBPluginDependency + 25.IBPluginDependency + 26.IBPluginDependency + 3.IBEditorWindowLastContentRect + 3.IBPluginDependency + 30.IBPluginDependency + 30.IBViewIntegration.shadowBlurRadius + 30.IBViewIntegration.shadowColor + 30.IBViewIntegration.shadowOffsetHeight + 30.IBViewIntegration.shadowOffsetWidth + 31.IBPluginDependency + 32.IBPluginDependency + 33.IBPluginDependency + 34.IBPluginDependency + 4.IBPluginDependency + 5.IBPluginDependency + 6.IBPluginDependency + 7.IBPluginDependency + 8.IBPluginDependency + 9.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{150, 182}, {706, 587}} + com.apple.InterfaceBuilder.CocoaPlugin + {{150, 182}, {706, 587}} + + {196, 240} + {{357, 418}, {480, 270}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{195, 769}, {616, 0}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + YES + + + YES + + + + + YES + + YES + + + YES + + + + 35 + + + + YES + + BrowserWindowController + NSWindowController + + YES + + YES + back_button_ + forward_button_ + tab_bar_view_ + url_bar_ + + + YES + NSToolbarItem + NSToolbarItem + NSView + NSToolbarItem + + + + IBProjectSource + browser/browser_window_controller.h + + + + + 0 + ../../../chrome.xcodeproj + 3 + + diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index cf0c49f..16073d8 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm @@ -5,13 +5,14 @@ #import "app_controller_mac.h" #import "base/message_loop.h" +#import "chrome/browser/browser_list.h" @implementation AppController // We can't use the standard terminate: method because it will abrubptly exit // the app and leave things on the stack in an unfinalized state. We need to // post a quit message to our run loop so the stack can gracefully unwind. -- (IBAction)quit:(id)sender { +- (IBAction)quit:(id)sender { // TODO(pinkerton): // since we have to roll it ourselves, ask the delegate (ourselves, really) // if we should terminate. For example, we might not want to if the user @@ -19,6 +20,14 @@ // require posting UI and may require spinning up another run loop to // handle it. If it says to continue, post the quit message, otherwise // go back to normal. + + // Close all the windows. + // TODO(pinkerton): the close code assumes that teardown happens + // synchronously, however with autorelease pools and ref-counting, we can't + // guarantee the window controller hits 0 inside this call, and thus the + // number of Browsers still alive will certainly be non-zero. Not sure yet + // how to handle this case. + // BrowserList::CloseAllBrowsers(false); MessageLoopForUI::current()->Quit(); } diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index 3e12603..ddceec2 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -2,19 +2,29 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/command_line.h" +#include "base/idle_timer.h" +#include "base/logging.h" +#include "base/string_util.h" +#include "chrome/browser/browser_list.h" +#include "chrome/common/pref_names.h" +#include "chrome/common/pref_service.h" +#include "net/base/cookie_monster.h" +#include "net/base/cookie_policy.h" +#include "net/base/net_util.h" +#include "net/base/registry_controlled_domain.h" +#include "net/url_request/url_request_context.h" + +#if defined(OS_WIN) + #include #include #include "chrome/browser/browser.h" -#include "base/command_line.h" -#include "base/idle_timer.h" -#include "base/logging.h" -#include "base/string_util.h" #include "chrome/app/chrome_dll_resource.h" #include "chrome/app/locales/locale_settings.h" #include "chrome/browser/automation/ui_controls.h" -#include "chrome/browser/browser_list.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_shutdown.h" #include "chrome/browser/browser_url_handler.h" @@ -53,20 +63,14 @@ #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/l10n_util.h" -#include "chrome/common/pref_names.h" -#include "chrome/common/pref_service.h" #include "chrome/common/win_util.h" -#include "net/base/cookie_monster.h" -#include "net/base/cookie_policy.h" -#include "net/base/net_util.h" -#include "net/base/registry_controlled_domain.h" #include "chromium_strings.h" #include "generated_resources.h" -using base::TimeDelta; +#endif // OS_WIN -static BrowserList g_browserlist; +using base::TimeDelta; // How long we wait before updating the browser chrome while loading a page. static const int kUIUpdateCoalescingTimeMS = 200; @@ -84,12 +88,14 @@ static const int kWindowTilePixels = 20; class ReducePluginsWorkingSetTask : public Task { public: virtual void Run() { +#if defined(OS_WIN) for (PluginProcessHostIterator iter; !iter.Done(); ++iter) { PluginProcessHost* plugin = const_cast(*iter); DCHECK(plugin->process()); base::Process process(plugin->process()); process.ReduceWorkingSet(); } +#endif } }; @@ -104,6 +110,7 @@ class BrowserIdleTimer : public base::IdleTimer { } virtual void OnIdle() { +#if defined(OS_WIN) // We're idle. Release browser and renderer unused pages. // Handle the Browser. @@ -123,6 +130,7 @@ class BrowserIdleTimer : public base::IdleTimer { // collection. g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, new ReducePluginsWorkingSetTask()); +#endif } }; @@ -164,8 +172,12 @@ Browser::Browser(Type type, Profile* profile) InitCommandState(); BrowserList::AddBrowser(this); +#if defined(OS_WIN) + // TODO(port): turn this back on when prefs are fleshed out. This asserts + // because the pref hasn't yet been registered. encoding_auto_detect_.Init(prefs::kWebKitUsesUniversalDetector, profile_->GetPrefs(), NULL); +#endif // Trim browser memory on idle for low & medium memory models. if (g_browser_process->memory_model() < BrowserProcess::HIGH_MEMORY_MODEL) @@ -266,6 +278,8 @@ void Browser::OpenEmptyWindow(Profile* profile) { browser->window()->Show(); } +#if defined(OS_WIN) + // static void Browser::OpenURLOffTheRecord(Profile* profile, const GURL& url) { Profile* off_the_record_profile = profile->GetOffTheRecordProfile(); @@ -2404,3 +2418,5 @@ void Browser::RegisterAppPrefs(const std::wstring& app_name) { prefs->RegisterDictionaryPref(window_pref.c_str()); } + +#endif // OS_WIN diff --git a/chrome/browser/browser.h b/chrome/browser/browser.h index 1faa8ab..3157e5a 100644 --- a/chrome/browser/browser.h +++ b/chrome/browser/browser.h @@ -5,19 +5,31 @@ #ifndef CHROME_BROWSER_BROWSER_H_ #define CHROME_BROWSER_BROWSER_H_ +#include "base/basictypes.h" + #include +#if defined(OS_MACOSX) || defined(OS_LINUX) +// Remove when we've finished porting the supporting classes. +#include "chrome/common/temp_scaffolding_stubs.h" +#endif + #include "chrome/browser/browser_process.h" -#include "chrome/browser/command_updater.h" -#include "chrome/browser/shell_dialogs.h" #include "chrome/browser/browser_window.h" #include "chrome/browser/sessions/session_id.h" +#include "chrome/common/notification_service.h" +#include "chrome/common/pref_member.h" +#include "base/gfx/rect.h" +#include "skia/include/SkBitmap.h" + +#if defined(OS_WIN) +#include "chrome/browser/command_updater.h" +#include "chrome/browser/shell_dialogs.h" #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/browser/tab_contents/tab_contents_delegate.h" #include "chrome/browser/tabs/tab_strip_model.h" #include "chrome/browser/toolbar_model.h" -#include "chrome/common/notification_service.h" -#include "chrome/common/pref_member.h" +#endif class BrowserIdleTimer; class BrowserWindow; @@ -105,14 +117,15 @@ class Browser : public TabStripModelDelegate, // Opens a new window with the default blank tab. static void OpenEmptyWindow(Profile* profile); +#if defined(OS_WIN) + // Opens the a new application window for the specified WebApp. + static void OpenWebApplication(Profile* profile, WebApp* app); + // Opens the specified URL in a new browser window in an incognito session. // If there is already an existing active incognito session for the specified // |profile|, that session is re-used. static void OpenURLOffTheRecord(Profile* profile, const GURL& url); - // Opens the a new application window for the specified WebApp. - static void OpenWebApplication(Profile* profile, WebApp* app); - // State Storage and Retrieval for UI /////////////////////////////////////// // Save and restore the window position. @@ -139,6 +152,7 @@ class Browser : public TabStripModelDelegate, // Invoked when the window containing us is closing. Performs the necessary // cleanup. void OnWindowClosing(); +#endif // OS_WIN // TabStripModel pass-thrus ///////////////////////////////////////////////// @@ -168,6 +182,7 @@ class Browser : public TabStripModelDelegate, } // Tab adding/showing functions ///////////////////////////////////////////// +#if defined(OS_WIN) // Add a new tab with the specified URL. If instance is not null, its process // will be used to render the tab. @@ -364,7 +379,7 @@ class Browser : public TabStripModelDelegate, virtual void ToolbarSizeChanged(TabContents* source, bool is_animating); virtual void URLStarredChanged(TabContents* source, bool starred); - virtual void ContentsMouseEvent(TabContents* source, UINT message); + virtual void ContentsMouseEvent(TabContents* source, uint32 message); virtual void UpdateTargetURL(TabContents* source, const GURL& url); virtual void ContentsZoomChange(bool zoom_in); @@ -381,6 +396,8 @@ class Browser : public TabStripModelDelegate, // Overridden from SelectFileDialog::Listener: virtual void FileSelected(const std::wstring& path, void* params); +#endif // OS_WIN + // Overridden from NotificationObserver: virtual void Observe(NotificationType type, const NotificationSource& source, @@ -392,6 +409,7 @@ class Browser : public TabStripModelDelegate, // Initialize state for all browser commands. void InitCommandState(); +#if defined(OS_WIN) // Update commands which may be enabled or disabled depending on the tab's // state. void UpdateCommandsForTabState(); @@ -432,7 +450,9 @@ class Browser : public TabStripModelDelegate, friend class AutomationProvider; // Getters for the location bar and go button. +#endif // OS_WIN LocationBarView* GetLocationBarView() const; +#if defined(OS_WIN) GoButton* GetGoButton(); // Returns the StatusBubble from the current toolbar. It is possible for @@ -454,9 +474,11 @@ class Browser : public TabStripModelDelegate, int selected_navigation); // OnBeforeUnload handling ////////////////////////////////////////////////// +#endif typedef std::set UnloadListenerSet; +#if defined(OS_WIN) // Processes the next tab that needs it's beforeunload/unload event fired. void ProcessPendingTabs(); @@ -512,6 +534,8 @@ class Browser : public TabStripModelDelegate, // done only once per application name / per session. static void RegisterAppPrefs(const std::wstring& app_name); +#endif // OS_WIN + // Data members ///////////////////////////////////////////////////////////// // This Browser's type. diff --git a/chrome/browser/browser_list.cc b/chrome/browser/browser_list.cc index 90ccb56..739dadb 100644 --- a/chrome/browser/browser_list.cc +++ b/chrome/browser/browser_list.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "build/build_config.h" + #include "chrome/browser/browser_list.h" #include "base/logging.h" @@ -10,10 +12,14 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_shutdown.h" #include "chrome/browser/browser_window.h" +#if defined(OS_WIN) +// TODO(port): these can probably all go away, even on win #include "chrome/browser/profile.h" #include "chrome/browser/profile_manager.h" #include "chrome/browser/tab_contents/web_contents.h" #include "chrome/common/notification_service.h" +#endif + BrowserList::list_type BrowserList::browsers_; std::vector BrowserList::observers_; @@ -143,9 +149,13 @@ void BrowserList::WindowsSessionEnding() { // And shutdown. browser_shutdown::Shutdown(); +#if defined(OS_WIN) // At this point the message loop is still running yet we've shut everything // down. If any messages are processed we'll likely crash. Exit now. ExitProcess(ResultCodes::NORMAL_EXIT); +#else + NOTIMPLEMENTED(); +#endif } // static diff --git a/chrome/browser/browser_window_cocoa.h b/chrome/browser/browser_window_cocoa.h new file mode 100644 index 0000000..74847bd --- /dev/null +++ b/chrome/browser/browser_window_cocoa.h @@ -0,0 +1,64 @@ +// Copyright (c) 2009 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. + +#ifndef CHROME_BROWSER_WINDOW_COCOA_H_ +#define CHROME_BROWSER_WINDOW_COCOA_H_ + +#include "chrome/browser/browser_window.h" + +@class BrowserWindowController; +@class NSWindow; + +// An implementation of BrowserWindow for Cocoa. Bridges between C++ and +// the Cocoa NSWindow. Cross-platform code will interact with this object when +// it needs to manipulate the window. + +class BrowserWindowCocoa : public BrowserWindow { + public: + BrowserWindowCocoa(BrowserWindowController* controller, NSWindow* window); + virtual ~BrowserWindowCocoa(); + + // Overridden from BrowserWindow + virtual void Init(); + virtual void Show(); + virtual void SetBounds(const gfx::Rect& bounds); + virtual void Close(); + virtual void Activate(); + virtual void FlashFrame(); + virtual void* GetNativeHandle(); + virtual TabStrip* GetTabStrip() const; + virtual StatusBubble* GetStatusBubble(); + virtual void SelectedTabToolbarSizeChanged(bool is_animating); + virtual void UpdateTitleBar(); + virtual void UpdateLoadingAnimations(bool should_animate); + virtual gfx::Rect GetNormalBounds() const; + virtual bool IsMaximized(); + virtual ToolbarStarToggle* GetStarButton() const; + virtual LocationBarView* GetLocationBarView() const; + virtual GoButton* GetGoButton() const; + virtual BookmarkBarView* GetBookmarkBarView(); + virtual void UpdateToolbar(TabContents* contents, + bool should_restore_state); + virtual void FocusToolbar(); + virtual bool IsBookmarkBarVisible() const; + virtual void ToggleBookmarkBar(); + virtual void ShowAboutChromeDialog(); + virtual void ShowBookmarkManager(); + virtual void ShowReportBugDialog(); + virtual void ShowClearBrowsingDataDialog(); + virtual void ShowImportDialog(); + virtual void ShowSearchEnginesDialog(); + virtual void ShowPasswordManager(); + virtual void ShowHTMLDialog(HtmlDialogContentsDelegate* delegate, + void* parent_window); + + protected: + virtual void DestroyBrowser(); + + private: + BrowserWindowController* controller_; // weak, owns us + NSWindow* window_; // weak, owned by |controller_| +}; + +#endif // CHROME_BROWSER_WINDOW_COCOA_H_ diff --git a/chrome/browser/browser_window_cocoa.mm b/chrome/browser/browser_window_cocoa.mm new file mode 100644 index 0000000..d3061d9 --- /dev/null +++ b/chrome/browser/browser_window_cocoa.mm @@ -0,0 +1,141 @@ +// Copyright (c) 2009 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. + +#include "base/gfx/rect.h" +#include "chrome/browser/browser_window_cocoa.h" +#include "chrome/browser/browser_window_controller.h" + +BrowserWindowCocoa::BrowserWindowCocoa(BrowserWindowController* controller, + NSWindow* window) + : controller_(controller), window_(window) { +} + +BrowserWindowCocoa::~BrowserWindowCocoa() { +} + +void BrowserWindowCocoa::Init() { +} + +void BrowserWindowCocoa::Show() { + [window_ makeKeyAndOrderFront:controller_]; +} + +void BrowserWindowCocoa::SetBounds(const gfx::Rect& bounds) { + NSRect cocoa_bounds = NSMakeRect(bounds.x(), 0, bounds.width(), + bounds.height()); + // flip coordinates + NSScreen* screen = [window_ screen]; + cocoa_bounds.origin.y = + [screen frame].size.height - bounds.height() - bounds.y(); +} + +void BrowserWindowCocoa::Close() { + [window_ orderOut:controller_]; +} + +void BrowserWindowCocoa::Activate() { + [window_ makeKeyAndOrderFront:controller_]; +} + +void BrowserWindowCocoa::FlashFrame() { + [[NSApplication sharedApplication] + requestUserAttention:NSInformationalRequest]; +} + +void* BrowserWindowCocoa::GetNativeHandle() { + return [controller_ window]; +} + +TabStrip* BrowserWindowCocoa::GetTabStrip() const { + return NULL; +} + +StatusBubble* BrowserWindowCocoa::GetStatusBubble() { + return NULL; +} + +void BrowserWindowCocoa::SelectedTabToolbarSizeChanged(bool is_animating) { +} + +void BrowserWindowCocoa::UpdateTitleBar() { +} + +void BrowserWindowCocoa::UpdateLoadingAnimations(bool should_animate) { +} + +gfx::Rect BrowserWindowCocoa::GetNormalBounds() const { + // TODO(pinkerton): not sure if we can get the non-zoomed bounds, or if it + // really matters. We may want to let Cocoa handle all this for us. + NSRect frame = [window_ frame]; + NSScreen* screen = [window_ screen]; + gfx::Rect bounds(frame.origin.x, 0, frame.size.width, frame.size.height); + bounds.set_y([screen frame].size.height + frame.size.height + frame.origin.y); + return bounds; +} + +bool BrowserWindowCocoa::IsMaximized() { + return [window_ isZoomed]; +} + +ToolbarStarToggle* BrowserWindowCocoa::GetStarButton() const { + return NULL; +} + +LocationBarView* BrowserWindowCocoa::GetLocationBarView() const { + return NULL; +} + +GoButton* BrowserWindowCocoa::GetGoButton() const { + return NULL; +} + +BookmarkBarView* BrowserWindowCocoa::GetBookmarkBarView() { + return NULL; +} + +void BrowserWindowCocoa::UpdateToolbar(TabContents* contents, + bool should_restore_state) { +} + +void BrowserWindowCocoa::FocusToolbar() { +} + +bool BrowserWindowCocoa::IsBookmarkBarVisible() const { + return true; +} + +void BrowserWindowCocoa::ToggleBookmarkBar() { +} + +void BrowserWindowCocoa::ShowAboutChromeDialog() { +} + +void BrowserWindowCocoa::ShowBookmarkManager() { +} + +void BrowserWindowCocoa::ShowReportBugDialog() { +} + +void BrowserWindowCocoa::ShowClearBrowsingDataDialog() { +} + +void BrowserWindowCocoa::ShowImportDialog() { +} + +void BrowserWindowCocoa::ShowSearchEnginesDialog() { +} + +void BrowserWindowCocoa::ShowPasswordManager() { +} + +void BrowserWindowCocoa::ShowHTMLDialog(HtmlDialogContentsDelegate* delegate, + void* parent_window) { +} + +void BrowserWindowCocoa::DestroyBrowser() { + [controller_ destroyBrowser]; + + // at this point the controller is dead (autoreleased), so + // make sure we don't try to reference it any more. +} diff --git a/chrome/browser/browser_window_controller.h b/chrome/browser/browser_window_controller.h new file mode 100644 index 0000000..7ae2bd0 --- /dev/null +++ b/chrome/browser/browser_window_controller.h @@ -0,0 +1,44 @@ +// Copyright (c) 2009 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. + +#ifndef CHROME_BROWSER_BROWSER_WINDOW_CONTROLLER_H_ +#define CHROME_BROWSER_BROWSER_WINDOW_CONTROLLER_H_ + +// A class acting as the Objective-C controller for the Browser object. Handles +// interactions between Cocoa and the cross-platform code. + +#import + +class Browser; +class BrowserWindow; + +@interface BrowserWindowController : NSWindowController { + @private + Browser* browser_; // strong + BrowserWindow* window_shim_; // strong + + // Some toolbar items for IB. We can remove these if we stop using IB for + // NSToolbar support (it only half works). + IBOutlet NSToolbarItem* back_button_; + IBOutlet NSToolbarItem* forward_button_; + IBOutlet NSToolbarItem* url_bar_; + + // This will become its own view at some point. + IBOutlet NSView* tab_bar_view_; +} + +// Load the browser window nib and do any Cocoa-specific initialization. +// Takes ownership of |browser|. +- (id)initWithBrowser:(Browser*)browser; + +// call to make the browser go away from other places in the cross-platform +// code. +- (void)destroyBrowser; + +// Access the C++ bridge between the NSWindow and the rest of Chromium +- (BrowserWindow*)browserWindow; + +@end + +#endif // CHROME_BROWSER_BROWSER_WINDOW_CONTROLLER_H_ diff --git a/chrome/browser/browser_window_controller.mm b/chrome/browser/browser_window_controller.mm new file mode 100644 index 0000000..c5e4abc --- /dev/null +++ b/chrome/browser/browser_window_controller.mm @@ -0,0 +1,75 @@ +// Copyright (c) 2009 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. + +#import "chrome/browser/browser.h" +#import "chrome/browser/browser_window_cocoa.h" +#import "chrome/browser/browser_window_controller.h" + +@implementation BrowserWindowController + +// Load the browser window nib and do any Cocoa-specific initialization. +// Takes ownership of |browser|. Note that the nib also sets this controller +// up as the window's delegate. +- (id)initWithBrowser:(Browser*)browser { + if ((self = [super initWithWindowNibName:@"BrowserWindow"])) { + browser_ = browser; + window_shim_ = new BrowserWindowCocoa(self, [self window]); + } + return self; +} + +- (void)dealloc { + browser_->CloseAllTabs(); + delete browser_; + delete window_shim_; + [super dealloc]; +} + +// Access the C++ bridge between the NSWindow and the rest of Chromium +- (BrowserWindow*)browserWindow { + return window_shim_; +} + +- (void)windowDidLoad { + [(NSControl*)[url_bar_ view] + setStringValue:@"http://the.interwebs.start.here"]; +} + +- (void)destroyBrowser { + // we need the window to go away now, other areas of code will be checking + // the number of browser objects remaining after we finish so we can't defer + // deletion via autorelease. + [self autorelease]; +} + +// Called when the window is closing from Cocoa. Destroy this controller, +// which will tear down the rest of the infrastructure as the Browser is +// itself destroyed. +- (void)windowWillClose:(NSNotification *)notification { + [self autorelease]; +} + +// Called when the user wants to close a window. Usually it's ok, but we may +// want to prompt the user when they have multiple tabs open, for example. +- (BOOL)windowShouldClose:(id)sender { + // TODO(pinkerton): check tab model to see if it's ok to close the + // window. Use NSGetAlertPanel() and runModalForWindow:. + return YES; +} + +// NSToolbar delegate methods + +- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar { + return [NSArray arrayWithObjects:[back_button_ itemIdentifier], + [forward_button_ itemIdentifier], + [url_bar_ itemIdentifier], nil]; +} + +- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar { + return [NSArray arrayWithObjects:[back_button_ itemIdentifier], + [forward_button_ itemIdentifier], + [url_bar_ itemIdentifier], nil]; +} + +@end diff --git a/chrome/browser/browser_window_factory.mm b/chrome/browser/browser_window_factory.mm new file mode 100644 index 0000000..ea813be --- /dev/null +++ b/chrome/browser/browser_window_factory.mm @@ -0,0 +1,20 @@ +// Copyright (c) 2009 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. + +#include "chrome/browser/browser_window.h" +#include "chrome/browser/browser_window_controller.h" + +// Create the controller for the Browser, which handles loading the browser +// window from the nib. The controller takes ownership of |browser|. +// static +BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) { + // TODO(pinkerton): figure out ownership model. If BrowserList keeps track + // of the browser windows, it will probably tell us when it needs to go + // away, and it seems we need to feed back to that when we get a + // performClose: from the UI. + BrowserWindowController* controller = + [[BrowserWindowController alloc] initWithBrowser:browser]; + return [controller browserWindow]; +} + diff --git a/chrome/browser/tab_contents/tab_contents_delegate.h b/chrome/browser/tab_contents/tab_contents_delegate.h index 10ea799..599b64c 100644 --- a/chrome/browser/tab_contents/tab_contents_delegate.h +++ b/chrome/browser/tab_contents/tab_contents_delegate.h @@ -5,9 +5,7 @@ #ifndef CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_DELEGATE_H_ #define CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_DELEGATE_H_ -// TODO(maruel): Remove once UINT and HWND are replaced / typedef. -#include - +#include "base/basictypes.h" #include "chrome/browser/tab_contents/page_navigator.h" #include "chrome/common/navigation_types.h" @@ -95,7 +93,7 @@ class TabContentsDelegate : public PageNavigator { virtual void UpdateTargetURL(TabContents* source, const GURL& url) = 0; // Notification that the target URL has changed - virtual void ContentsMouseEvent(TabContents* source, UINT message) { } + virtual void ContentsMouseEvent(TabContents* source, uint32 message) { } // Request the delegate to change the zoom level of the current tab. virtual void ContentsZoomChange(bool zoom_in) { } diff --git a/chrome/chrome.xcodeproj/project.pbxproj b/chrome/chrome.xcodeproj/project.pbxproj index 9af2a0a..e838128 100644 --- a/chrome/chrome.xcodeproj/project.pbxproj +++ b/chrome/chrome.xcodeproj/project.pbxproj @@ -306,6 +306,21 @@ E46C4B3F0F21095400B393B8 /* url_request_intercept_job.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFCC20E9D4D6B009A6919 /* url_request_intercept_job.cc */; }; E46C4B490F21096300B393B8 /* worker_thread_ticker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFC140E9D4C9F009A6919 /* worker_thread_ticker.cc */; }; E46C4B4C0F21098F00B393B8 /* worker_thread_ticker_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = E46C4B4B0F21098F00B393B8 /* worker_thread_ticker_unittest.cc */; }; + E46C4C2E0F212CAF00B393B8 /* browser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BF8300E9D4839009A6919 /* browser.cc */; }; + E46C4D0F0F2138D400B393B8 /* browser_list.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BF83C0E9D4839009A6919 /* browser_list.cc */; }; + E48B66A80F26257E002E47EC /* libnet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7B004E0E9D5464009A6919 /* libnet.a */; }; + E48B67320F2625B8002E47EC /* libgoogleurl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7BFF6E0E9D540F009A6919 /* libgoogleurl.a */; }; + E48B67CB0F262607002E47EC /* libmodp_b64.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7B005D0E9D54AA009A6919 /* libmodp_b64.a */; }; + E48B67CF0F26263C002E47EC /* libskia.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7B00330E9D5459009A6919 /* libskia.a */; }; + E48B67ED0F262823002E47EC /* libbase_gfx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7BFDC90E9D525B009A6919 /* libbase_gfx.a */; }; + E48B684D0F2630D3002E47EC /* browser_window_factory.mm in Sources */ = {isa = PBXBuildFile; fileRef = E48B684C0F2630D3002E47EC /* browser_window_factory.mm */; }; + E48B68570F26330C002E47EC /* browser_window_controller.mm in Sources */ = {isa = PBXBuildFile; fileRef = E48B68560F26330C002E47EC /* browser_window_controller.mm */; }; + E48B68640F2637B6002E47EC /* browser_window_cocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = E48B68630F2637B6002E47EC /* browser_window_cocoa.mm */; }; + E48B689B0F263DF5002E47EC /* BrowserWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = E48B68990F263DF5002E47EC /* BrowserWindow.xib */; }; + E48B6C280F2783E9002E47EC /* extension_protocols.cc in Sources */ = {isa = PBXBuildFile; fileRef = E48B6C270F2783E9002E47EC /* extension_protocols.cc */; }; + E48B6C2C0F27840B002E47EC /* password_form_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = B5D16EB30F21445600861FAC /* password_form_manager.cc */; }; + E48B6C2E0F278426002E47EC /* safe_browsing_service.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFAE50E9D49DE009A6919 /* safe_browsing_service.cc */; }; + E48B6C3C0F27844F002E47EC /* web_data_service.cc in Sources */ = {isa = PBXBuildFile; fileRef = E48B6C3B0F27844F002E47EC /* web_data_service.cc */; }; E48FB9590EC4E9C10052B72B /* safe_browsing_database_bloom.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFADF0E9D49DE009A6919 /* safe_browsing_database_bloom.cc */; }; E48FB95C0EC4E9DD0052B72B /* safe_browsing_database_impl.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFAE10E9D49DE009A6919 /* safe_browsing_database_impl.cc */; }; E48FB9760EC4EA320052B72B /* url_request_failed_dns_job.cc in Sources */ = {isa = PBXBuildFile; fileRef = E48FB96E0EC4EA270052B72B /* url_request_failed_dns_job.cc */; }; @@ -1730,6 +1745,16 @@ E46C46C30F1F9AE200B393B8 /* temp_scaffolding_stubs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = temp_scaffolding_stubs.h; sourceTree = ""; }; E46C46C40F1F9AE200B393B8 /* temp_scaffolding_stubs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = temp_scaffolding_stubs.cpp; sourceTree = ""; }; E46C4B4B0F21098F00B393B8 /* worker_thread_ticker_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = worker_thread_ticker_unittest.cc; sourceTree = ""; }; + E48B684C0F2630D3002E47EC /* browser_window_factory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = browser_window_factory.mm; sourceTree = ""; }; + E48B68550F26330C002E47EC /* browser_window_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = browser_window_controller.h; sourceTree = ""; }; + E48B68560F26330C002E47EC /* browser_window_controller.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = browser_window_controller.mm; sourceTree = ""; }; + E48B68620F2637B6002E47EC /* browser_window_cocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = browser_window_cocoa.h; sourceTree = ""; }; + E48B68630F2637B6002E47EC /* browser_window_cocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = browser_window_cocoa.mm; sourceTree = ""; }; + E48B689A0F263DF5002E47EC /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = app/nibs/English.lproj/BrowserWindow.xib; sourceTree = ""; }; + E48B6C260F2783E9002E47EC /* extension_protocols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = extension_protocols.h; sourceTree = ""; }; + E48B6C270F2783E9002E47EC /* extension_protocols.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extension_protocols.cc; sourceTree = ""; }; + E48B6C3A0F27844F002E47EC /* web_data_service.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = web_data_service.h; path = webdata/web_data_service.h; sourceTree = ""; }; + E48B6C3B0F27844F002E47EC /* web_data_service.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = web_data_service.cc; path = webdata/web_data_service.cc; sourceTree = ""; }; E48FB9610EC4EA270052B72B /* automation_autocomplete_edit_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_autocomplete_edit_tracker.h; sourceTree = ""; }; E48FB9620EC4EA270052B72B /* automation_browser_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_browser_tracker.h; sourceTree = ""; }; E48FB9630EC4EA270052B72B /* automation_constrained_window_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_constrained_window_tracker.h; sourceTree = ""; }; @@ -1855,14 +1880,19 @@ files = ( E45065DE0EEEC6FF003BE099 /* AppKit.framework in Frameworks */, E45065E00EEEC709003BE099 /* Foundation.framework in Frameworks */, + E48B67320F2625B8002E47EC /* libgoogleurl.a in Frameworks */, E45062680EE890C2003BE099 /* libbase.a in Frameworks */, + E48B67ED0F262823002E47EC /* libbase_gfx.a in Frameworks */, E45063130EE990A4003BE099 /* libbrowser.a in Frameworks */, E45063120EE99096003BE099 /* libcommon.a in Frameworks */, E450631C0EE990FA003BE099 /* libevent.a in Frameworks */, E45062A90EE89154003BE099 /* libicudata.a in Frameworks */, E45062A70EE89146003BE099 /* libicui18n.a in Frameworks */, E45062AC0EE89154003BE099 /* libicuuc.a in Frameworks */, + E48B67CB0F262607002E47EC /* libmodp_b64.a in Frameworks */, + E48B66A80F26257E002E47EC /* libnet.a in Frameworks */, E45063140EE990AB003BE099 /* librenderer.a in Frameworks */, + E48B67CF0F26263C002E47EC /* libskia.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2086,6 +2116,11 @@ 4D7BF84A0E9D4839009A6919 /* browser_url_handler.cc */, 4D7BF84B0E9D4839009A6919 /* browser_url_handler.h */, 4D7BF84D0E9D4839009A6919 /* browser_window.h */, + E48B68620F2637B6002E47EC /* browser_window_cocoa.h */, + E48B68630F2637B6002E47EC /* browser_window_cocoa.mm */, + E48B68550F26330C002E47EC /* browser_window_controller.h */, + E48B68560F26330C002E47EC /* browser_window_controller.mm */, + E48B684C0F2630D3002E47EC /* browser_window_factory.mm */, 4D7BF84E0E9D4839009A6919 /* browsing_data_remover.cc */, 4D7BF84F0E9D4839009A6919 /* browsing_data_remover.h */, 4D7BF8500E9D4839009A6919 /* browsing_instance.cc */, @@ -2983,6 +3018,7 @@ E450610A0EE87FB6003BE099 /* nibs */ = { isa = PBXGroup; children = ( + E48B68990F263DF5002E47EC /* BrowserWindow.xib */, 4DCE9E2B0EF0B8C000682526 /* MainMenu.xib */, ); path = nibs; @@ -3071,6 +3107,8 @@ children = ( E450761E0F150E0C003BE099 /* web_database.cc */, E450761F0F150E0C003BE099 /* web_database.h */, + E48B6C3A0F27844F002E47EC /* web_data_service.h */, + E48B6C3B0F27844F002E47EC /* web_data_service.cc */, ); name = webdata; sourceTree = ""; @@ -3119,6 +3157,8 @@ 0082A7520F16987A000AA0EF /* user_script_master.h */, E4F324400EE5CE94002533CE /* extension.cc */, E4F324410EE5CE94002533CE /* extension.h */, + E48B6C260F2783E9002E47EC /* extension_protocols.h */, + E48B6C270F2783E9002E47EC /* extension_protocols.cc */, E4F324420EE5CE94002533CE /* extension_unittest.cc */, A54612D90EE9957000A8EE5D /* extensions_service.cc */, A54612DA0EE9957000A8EE5D /* extensions_service.h */, @@ -3562,6 +3602,7 @@ buildActionMask = 2147483647; files = ( E43A79F40F1D192000ABD5D1 /* aliasCursor.png in Resources */, + E48B689B0F263DF5002E47EC /* BrowserWindow.xib in Resources */, E43A79F50F1D192000ABD5D1 /* cellCursor.png in Resources */, E45062C70EE8939A003BE099 /* chromium.icns in Resources */, E43A79F60F1D192000ABD5D1 /* contextMenuCursor.png in Resources */, @@ -3744,10 +3785,15 @@ 4D7BFAEE0E9D49E5009A6919 /* bloom_filter.cc in Sources */, E45075B20F1505C0003BE099 /* bookmark_codec.cc in Sources */, E45075B40F1505C9003BE099 /* bookmark_html_writer.cc in Sources */, + E46C4C2E0F212CAF00B393B8 /* browser.cc in Sources */, + E46C4D0F0F2138D400B393B8 /* browser_list.cc in Sources */, E45063530EE9BF31003BE099 /* browser_main.cc in Sources */, E450634F0EE9BE29003BE099 /* browser_main_mac.mm in Sources */, 4D7BF97B0E9D4857009A6919 /* browser_process.cc in Sources */, E45075B80F15060C003BE099 /* browser_trial.cc in Sources */, + E48B68640F2637B6002E47EC /* browser_window_cocoa.mm in Sources */, + E48B68570F26330C002E47EC /* browser_window_controller.mm in Sources */, + E48B684D0F2630D3002E47EC /* browser_window_factory.mm in Sources */, E45075E20F150A6F003BE099 /* buffered_resource_handler.cc in Sources */, 4D7BF98D0E9D485B009A6919 /* cancelable_request.cc in Sources */, E43A770D0F16610300ABD5D1 /* chrome_plugin_browsing_context.cc in Sources */, @@ -3762,6 +3808,7 @@ E45075E30F150A6F003BE099 /* download_throttling_resource_handler.cc in Sources */, E4F324470EE5CF1F002533CE /* expire_history_backend.cc in Sources */, E4F324430EE5CE94002533CE /* extension.cc in Sources */, + E48B6C280F2783E9002E47EC /* extension_protocols.cc in Sources */, A54612E20EE995F600A8EE5D /* extensions_service.cc in Sources */, E45075C10F1506F2003BE099 /* firefox2_importer.cc in Sources */, E45075C40F150701003BE099 /* firefox3_importer.cc in Sources */, @@ -3775,15 +3822,16 @@ 4D7BFA240E9D4905009A6919 /* in_memory_database.cc in Sources */, 4D7BFA260E9D4908009A6919 /* in_memory_history_backend.cc in Sources */, E45075B70F1505DD003BE099 /* keyword_provider.cc in Sources */, + 4D7BF9A00E9D4875009A6919 /* meta_table_helper.cc in Sources */, B555B2230F21506300F751B9 /* metrics_log.cc in Sources */, B555B2240F21506700F751B9 /* metrics_response.cc in Sources */, - 4D7BF9A00E9D4875009A6919 /* meta_table_helper.cc in Sources */, E45075CD0F150741003BE099 /* mork_reader.cc in Sources */, 4D7BFABB0E9D49C1009A6919 /* page_number.cc in Sources */, 4D7BFAC60E9D49CB009A6919 /* page_range.cc in Sources */, 4D7BFAC40E9D49C6009A6919 /* page_setup.cc in Sources */, 4D7BF9AC0E9D4880009A6919 /* page_state.cc in Sources */, 4D7BFA280E9D490C009A6919 /* page_usage_data.cc in Sources */, + E48B6C2C0F27840B002E47EC /* password_form_manager.cc in Sources */, 4D7BFAF10E9D49EB009A6919 /* protocol_parser.cc in Sources */, B6CCB9FA0F1EC33100106F0D /* provisional_load_details.cc in Sources */, E4F324500EE5CF7C002533CE /* query_parser.cc in Sources */, @@ -3793,6 +3841,7 @@ E48FB9590EC4E9C10052B72B /* safe_browsing_database_bloom.cc in Sources */, E48FB95C0EC4E9DD0052B72B /* safe_browsing_database_impl.cc in Sources */, E45075EC0F150ABA003BE099 /* safe_browsing_resource_handler.cc in Sources */, + E48B6C2E0F278426002E47EC /* safe_browsing_service.cc in Sources */, 4D7BFAF60E9D49F6009A6919 /* safe_browsing_util.cc in Sources */, 4D7BF9E10E9D48D6009A6919 /* save_file.cc in Sources */, E45075ED0F150ABA003BE099 /* save_file_resource_handler.cc in Sources */, @@ -3819,11 +3868,12 @@ E48FB9790EC4EA410052B72B /* url_request_mock_http_job.cc in Sources */, E48FB97A0EC4EA4A0052B72B /* url_request_mock_net_error_job.cc in Sources */, E48FB97C0EC4EA540052B72B /* url_request_slow_download_job.cc in Sources */, + B555B2250F21506B00F751B9 /* user_metrics.cc in Sources */, E46C42130F1D3DD200B393B8 /* user_script_master.cc in Sources */, 4D7BFA3E0E9D491B009A6919 /* visit_database.cc in Sources */, 4D7BFA430E9D491E009A6919 /* visit_tracker.cc in Sources */, 4D7BFA480E9D4922009A6919 /* visitsegment_database.cc in Sources */, - B555B2250F21506B00F751B9 /* user_metrics.cc in Sources */, + E48B6C3C0F27844F002E47EC /* web_data_service.cc in Sources */, E45076200F150E0C003BE099 /* web_database.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4249,6 +4299,15 @@ path = English.lproj; sourceTree = ""; }; + E48B68990F263DF5002E47EC /* BrowserWindow.xib */ = { + isa = PBXVariantGroup; + children = ( + E48B689A0F263DF5002E47EC /* English */, + ); + name = BrowserWindow.xib; + path = ../..; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/chrome/common/temp_scaffolding_stubs.cpp b/chrome/common/temp_scaffolding_stubs.cpp index af74d6d..3517c4f 100644 --- a/chrome/common/temp_scaffolding_stubs.cpp +++ b/chrome/common/temp_scaffolding_stubs.cpp @@ -8,6 +8,8 @@ #include "base/thread.h" #include "base/path_service.h" #include "base/singleton.h" +#include "chrome/browser/browser.h" +#include "chrome/browser/browser_shutdown.h" #include "chrome/browser/plugin_service.h" #include "chrome/browser/shell_integration.h" #include "chrome/common/chrome_constants.h" @@ -15,7 +17,9 @@ #include "chrome/common/pref_service.h" BrowserProcessImpl::BrowserProcessImpl(const CommandLine& command_line) - : created_local_state_(), created_metrics_service_(), + : main_notification_service_(new NotificationService), + memory_model_(HIGH_MEMORY_MODEL), + created_local_state_(), created_metrics_service_(), created_profile_manager_() { g_browser_process = this; } @@ -94,7 +98,9 @@ bool BrowserInit::LaunchBrowserImpl(const CommandLine& parsed_command_line, int* return_code) { DCHECK(profile); - // LAUNCH BROWSER WITH PROFILE HERE! + // this code is a simplification of BrowserInit::LaunchWithProfile::Launch() + Browser* browser = Browser::Create(profile); + browser->window()->Show(); return true; } @@ -173,6 +179,7 @@ void RegisterAllPrefs(PrefService*, PrefService*) { } namespace browser_shutdown { void ReadLastShutdownInfo() { } void Shutdown() { } +void OnShutdownStarting(ShutdownType type) { } } void OpenFirstRunDialog(Profile* profile) { } @@ -202,3 +209,17 @@ void PluginService::SetChromePluginDataDir(const std::wstring& data_dir) { void InstallJankometer(const CommandLine&) { } + +//-------------------------------------------------------------------------- + +void Browser::InitCommandState() { +} + +void Browser::Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { +} + +LocationBarView* Browser::GetLocationBarView() const { + return window_->GetLocationBarView(); +} diff --git a/chrome/common/temp_scaffolding_stubs.h b/chrome/common/temp_scaffolding_stubs.h index 603e7ca..712ca0d 100644 --- a/chrome/common/temp_scaffolding_stubs.h +++ b/chrome/common/temp_scaffolding_stubs.h @@ -12,12 +12,20 @@ #include #include "base/basictypes.h" +#include "base/ref_counted.h" #include "chrome/browser/browser_process.h" +class Browser; class CommandLine; +class MetricsService; class ProfileManager; class Profile; -class MetricsService; +class SessionID; +class URLRequestContext; +class WebContents; + +//--------------------------------------------------------------------------- +// These stubs are for Browser_main() class Upgrade { public: @@ -115,6 +123,8 @@ class BrowserProcessImpl : public BrowserProcess { void CreateProfileManager(); void CreateMetricsService(); + scoped_ptr main_notification_service_; + MemoryModel memory_model_; bool created_local_state_; scoped_ptr local_state_; bool created_metrics_service_; @@ -146,11 +156,27 @@ class UserDataManager { static UserDataManager* instance_; }; +struct SessionService { + void WindowClosed(const SessionID &) { } +}; + +class TabRestoreService { + public: + void BrowserClosing(Browser*) { } + void BrowserClosed(Browser*) { } +}; + class Profile { public: Profile(const std::wstring& user_data_dir); virtual std::wstring GetPath() { return path_; } virtual PrefService* GetPrefs(); + void ResetTabRestoreService() { } + TabRestoreService* GetTabRestoreService() { return NULL; } + SessionService* GetSessionService() { return NULL; } + bool IsOffTheRecord() { return false; } + URLRequestContext* GetRequestContext() { return NULL; } + private: std::wstring GetPrefFilePath(); @@ -165,6 +191,7 @@ class ProfileManager : NonThreadSafe { Profile* GetDefaultProfile(const std::wstring& user_data_dir); static std::wstring GetDefaultProfileDir(const std::wstring& user_data_dir); static std::wstring GetDefaultProfilePath(const std::wstring& profile_dir); + static void ShutdownSessionServices() { } private: DISALLOW_EVIL_CONSTRUCTORS(ProfileManager); }; @@ -179,17 +206,107 @@ class MetricsService { void SetUserPermitsUpload(bool enabled) { } }; -namespace browser { -void RegisterAllPrefs(PrefService*, PrefService*); -} - namespace browser_shutdown { void ReadLastShutdownInfo(); void Shutdown(); } +namespace browser { +void RegisterAllPrefs(PrefService*, PrefService*); +} + void OpenFirstRunDialog(Profile* profile); void InstallJankometer(const CommandLine&); +//--------------------------------------------------------------------------- +// These stubs are for Browser + +class LocationBarView { + public: + void ShowFirstRunBubble() { } +}; + +class DebuggerWindow : public base::RefCountedThreadSafe { + public: +}; + +class TabStripModelDelegate { + public: +}; + +class TabStripModelObserver { + public: +}; + +class NavigationController { + public: +}; + +class TabContentsDelegate { + public: +}; + +class TabContents { + public: + TabContents() : controller_(new NavigationController) { } + NavigationController* controller() const { return controller_.get(); } + WebContents* AsWebContents() const { return NULL; } + private: + scoped_ptr controller_; +}; + +// fake a tab strip, though it can't have any entries because the browser dtor +// checks. +class TabStripModel { + public: + TabStripModel(TabStripModelDelegate* delegate, Profile* profile) + : contents_(new TabContents) { } + virtual ~TabStripModel() { } + bool empty() const { return contents_.get() == NULL; } + int count() const { return contents_.get() ? 1 : 0; } + int selected_index() const { return 0; } + int GetIndexOfController(const NavigationController* controller) const { + return 0; + } + TabContents* GetTabContentsAt(int index) const { return contents_.get(); } + TabContents* GetSelectedTabContents() const { return contents_.get(); } + void SelectTabContentsAt(int index, bool user_gesture) { } + TabContents* AddBlankTab(bool foreground) { return contents_.get(); } + void CloseAllTabs() { contents_.reset(NULL); } + void AddObserver(TabStripModelObserver* observer) { } + void RemoveObserver(TabStripModelObserver* observer) { } + private: + scoped_ptr contents_; +}; + +class CommandUpdater { + public: + class CommandUpdaterDelegate { + public: + }; + + CommandUpdater(CommandUpdaterDelegate* const) { } +}; + +class SelectFileDialog : public base::RefCountedThreadSafe { + public: + class Listener { + public: + }; + void ListenerDestroyed() { } +}; + +class SiteInstance { + public: +}; + +class DockInfo { + public: +}; + +class ToolbarModel { + public: +}; + #endif // CHROME_COMMON_TEMP_SCAFFOLDING_STUBS_H_ -- cgit v1.1